方法的重写-overrideoverwrite

2023-11-15

方法的重写-override/overwrite

1.定义

  • 定义:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。
  • 应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写的方法。
  • 使用场景:当子类继承父类中的方法时,父类的方法不能满足子类的需求时,有需求需要重写父类方法时
  • 重载和重写的区别:重载方法名一样参数列表不一致,重写方法名和参数列表都一致。

2.重写的规定

  • 方法的声明:权限修饰符 返回值类型 方法名(形参列表)throws 异常的类型{方法体},父类A方法被子类A方法重写,则父类A方法叫被重写的方法,子类A方法叫重写的方法。

  • 子类重写的方法和父类被重写的方法方法名和形参列表相同

  • 子类重写的方法的权限修饰符可以大于等于父类被重写方法的权限修饰符,特别地子类不能重写父类中权限修饰符private的方法。

  • 返回值类型:

    ​ 如果父类被重写的方法的返回值的类型是void 则子类重写的方法的返回值也只能是void。

    ​ 如果父类被重写的方法的返回值的类型是A 类型,则子类重写的方法的返回值类型可以是A类或者A类的子类。

    ​ 如果父类被重写的方法的返回值的类型是基本数据类型(比如 double),则子类重写的方法的返回值类型必须是相同的数据类型(必须也是double

  • 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型

  • 子类和父类中的同名参数的方法要么都声明为static的(考虑重写),要么都声明为非static的(不是重写,静态方法不能够被覆盖

3.code举例

  • 父类Person

    public class Person {
        private String name;
        private int age;
    
        public Person() {
    
        }
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public void walk(int distance) {
            System.out.println("走路,走的距离是:" + distance + "公里");
            // 子类对象调用walk 方法时 show 方法并不是子类中的show方法(show方法不构成重写)
            show();
            // 子类对象调用walk 方法时 eat 方法并不是子类中的show方法(show方法不构成重写)
            eat();
        }
    
        public void eat() {
            System.out.println("吃饭");
        }
    
    
        // 父类中权限为private 的方法
        private void show() {
            System.out.println("我是一个人");
        }
    
        public Object info() {
            return null;
        }
    
    }
    
  • 子类Student

    public class Student extends Person{
        String major;
    
        public Student() {
    
        }
    
        public Student(String major) {
            this.major = major;
        }
    
        public void study() {
            System.out.println("学习 专业是 " + major);
        }
    
        //重写父类的方法
        @Override
        public void eat() {
    //        super.eat();
            System.out.println("学生应该多吃有营养的东西...");
        }
        // 父类 show方法时是 private的 此方法不构成父类方法的覆写
        public void show() {
            System.out.println("我是一学生");
        }
    
        // 与Person 类中 public Object info() 构成重写
        //如果父类被重写的方法的返回值的类型是A 类型,则子类重写的方法的返回值类型可以是A类或者A类的子类
        public String info() {
            return null;
        }
    
    }
    
  • 测试类

    public class PersonTest {
        public static void main(String[] args) {
            Student s = new Student("计算机");
            s.walk(20);
    
            System.out.println("---------------------------------------------");
    
            s.eat();
        }
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

方法的重写-overrideoverwrite 的相关文章

随机推荐

  • 未授权访问的MongoDB修复方案

    修复方法 1 不要把MongoDB服务器部署在互联网上或者DMZ 开启MongoDB的授权访问 编辑 etc mongo conf 文件 找到 auth true 去掉注释 创建用户管理员 另外再连接MongoDB的时候 public cl
  • Mysql(9)_视图

    1 视图是什么 首先 视图是虚拟的表 是不存在的 若使用jdbc连接它 是会报错的 它本质上是sql语句 其次 物理表是真实存在的表 占用内存空间 视图没有实际的物理记录 而表有 视图 view 是在基本表之上建立的表 它的结构 即所定义的
  • 2D/3D人体姿态估计 (2D/3D Human Pose Estimation)

    1 基本概念 算法改进入口 网络设计 特征流 损失函数 数据集的重要性 只要有一个好的 针对性的数据集 问题都可以解决 过集成新一代AutoML技术 可降低算法试错成本 人体姿态估计 Human Pose Estimation 是指图像或视
  • 字典序及1-n之间的数按字典序排列

    今天在刷LeetCode的时候遇见了一道题 题的要求是 给你一个整数 n 按字典序返回范围 1 n 内所有整数 你必须设计一个时间复杂度为 O n 且使用 O 1 额外空间的算法 开始以为是简单的输出 提交后发现与答案相差甚多 看评论后方了
  • xmind右键无法创建

    xmind右键菜单无法创建 前言 安装xmind 设置鼠标右键菜单 验证是否修复成功 后语 前言 前言 hello 不知大家在安装完xmind后 回到桌面后是否可以右键新建xmind文件 如果不行的话 那我就希望这篇文章能帮到你啦 安装xm
  • for in 循环详解

    for i 循环的作用 for in 语句以任意顺序迭代一个对象的除 Symbol 以外的可枚举属性 包括继承的可枚举属性 for in 是为遍历对象属性而构建的 不建议与数组一起使用 在处理有 key value 数据 用于获取对接的 k
  • 人脸识别demo分析(opencv版本)

    一 faceRecognition接口说明 函数名 faceRecognition 函数描述 人脸识别 参数 int recognitionPic 识别的照片 int targetFaceIndex 目标匹配照片索引值 返回 失败返回 1
  • HTML

    如果想将超出div高度和宽度的内容隐藏就用overflow hidden 如果想让超出的内容显示而div宽高不变 用overflow auto 在原来的div宽高基础上出现滚动条 overflow x hidden 设置宽度超出div宽度后
  • Linux 2.6.19.x 内核编译配置选项简介(转)

    Linux 2 6 19 x 内核编译配置选项简介作者 金步国版权声明本文作者是一位自由软件爱好者 所以本文虽然不是软件 但是本着 GPL 的精神发布 任何人都可以自由使用 转载 复制和再分发 但必须保留作者署名 亦不得对声明中的任何条款作
  • 解决Windows下_findnext()异常

    在windows中 使用文件遍历函数 findnext会报0xC0000005错误 原因 findnext 第一个参数 路径句柄 返回的类型为intptr t long long 要改为long long或者intptr t 获取特定格式的
  • 修改MySQL 数据库名称

    MySQL不支持直接修改数据库名称语法 那么要修改数据库名称该如何操作呢 例如 我们将数据库test 修改为test2 第一步 创建新名称对应的数据库 create database if not exists test2 第二步 获取所有
  • 【JDK】Java环境搭建,配置环境变量

    文章目录 1 JDK的下载与安装 1 1 下载JDK 1 2 安装JDK 1 2 1 压缩版JDK 1 2 2 安装版JDK 2 配置环境变量 2 1 打开环境变量 2 2 修改环境变量 2 2 1 新建 JAVA HOME 变量 2 2
  • 非常好用的 文件上传控件

    http fex baidu com webuploader document html
  • Java 重写 equals和hashcode

    重写equals方法的时候为什么需要重写hashcode
  • SqlServe--从字符串中提取数字

    1 基础使用 声明一个nvarchar类型的变量并赋值 declare Name nvarchar 50 set Name 我正在123学 习22 SQL中11 的一些函数 patindex函数返回所查内容在字符串中第一次出现的内容 pri
  • STM32 (十五)ESP8266WIFI

    简介 1 ESP8266wifi 模块 低功耗串口WiFi模块ESP8266内置一个Tensilica 泰思立达 Xtensa架构的32位处理器L106 具有5级流水线 ARM CortexM3是3级流水线 最大时钟速度为160MHz 可以
  • JMM简单理解

    JMM java内存模型 代码理解 public class test private static boolean f false public static void main String args throws Interrupte
  • Python日志记录基础教程:logging模块详解与示例代码

    Python日志记录基础教程 logging模块详解与示例代码 在Python应用程序的开发过程中 日志记录是一个重要的组成部分 它能够帮助开发人员追踪和调试代码 并记录应用程序的运行情况 Python标准库中的logging模块提供了一个
  • 【计算机视觉

    文章目录 一 CBC Complete Blood Count 二 CURE TSD CURE Traffic Sign Detection 三 DUO Detecting Underwater Objects 四 Duke Breast
  • 方法的重写-overrideoverwrite

    方法的重写 override overwrite 1 定义 定义 子类继承父类以后 可以对父类中同名同参数的方法 进行覆盖操作 应用 重写以后 当创建子类对象以后 通过子类对象调用子父类中的同名同参数的方法时 实际执行的是子类重写的方法 使