当前位置: 首页 > news >正文

方法的重写

目录

  • 1、重写的概念
  • 2、方法重写的规则
  • 3、重写 VS 重载

1、重写的概念

重写,也称为覆盖,是子类对父类的非构造、非静态、非 final 修饰、非 private 修饰的方法的实现过程的重新编写。重写可以让子类根据需要来实现父类的方法。方法重写是子类与父类的一种多态性表现。

2、方法重写的规则

  • 重写的方法,可以使用 @Override 注解来显示指定,这个注解可以帮我们合法校验重写是否成功,比如重写的方法名由 flush 错写成 f1ush,用肉眼看会很容易忽略这个错误,而加上这个注解可以帮我们校验出来。
  • 子类重写父类的方法时,一般来说要和父类方法的原型相同,即修饰符 返回值类型 方法名 (参数列表)完全一致。
  • 子类不能重写父类的 final 修饰的方法、private 修饰的方法、构造方法和静态方法。
// 父类
public class Base {
    // 1、无参构造方法
    public Base() {
    }

    // 2、private 修饰的方法
    private void method1(){
        System.out.println("Base.method1");
    }

    // 3、静态方法
    public static void method2(){
        System.out.println("Base.method2");
    }

    // 4、final 修饰的方法
    public final void method3(){
        System.out.println("Base.method3");
    }
}

// 子类
public class Derived extends Base{
    // 1、重写父类的构造方法报错
    // 创建子类对象的时候会调用子类的构造方法,在子类构造方法中又会调用父类的构造方法
    // 如果对父类构造方法进行重写,那么对象创建好后会再一次调用父类构造方法,这样做没有任何意义
    // 况且构造方法是为了将对象的属性初始化完整,并不能实现多态
    // 而且在语法上严格禁止子类重写父类的构造方法
    @Override
    public Base(){
    }

    // 2、重写父类 private 修饰的方法报错
    // private 修饰的方法无法在类外,也不能在类外的子类中的方法被访问,更不可能实现多态
    @Override
    private void method1(){
        System.out.println("Derived.method1");
    }

    // 3、重写父类的静态方法报错
    // 在实现多态时,需要通过父类的引用来调用子类中被重写的方法,在程序编译期间无法知道调用的是哪个类的方法
    // 只有在运行阶段,父类引用指向具体的对象时才知道,从而调用对应子类的对象中的方法实现多态
    // 根据实现多态的条件可知:被重写的方法要通过对象来调用,而静态方法没有 this 引用,因此无法被对象调用,所以静态方法不能被重写
    @Override
    public static void method2(){
        System.out.println("Derived.method2");
    }

    // 4、重写父类 final 修饰的方法报错
    // 被 final 修饰的方法不能进行重写
    @Override
    public final void method3(){
        System.out.println("Derived.method3");
    }
}
  • 被重写的方法返回值类型可以不同,但必须是具有父子关系的。
	// 方法返回值类型是父类类型,而 return 的是子类类型
    public static Base method1(){
        return new Derived();
    }
  • 子类中的访问权限可以和父类中的不同,但是必须比父类中的更低。访问权限排序:public > protected > default > private。

在这里插入图片描述

3、重写 VS 重载

在这里插入图片描述
方法重载是一个类的多态性的表现,而方法重写是子类与父类的一种多态性表现。

在这里插入图片描述

相关文章:

  • ubuntu安装openWebUI和Dify【自用详细版】
  • 【多源BFS】01 矩阵 / 飞地的数量 / 地图中的最高点 / 地图分析 / 腐烂的苹果
  • 01-JVM 内存模型与 GC 原理
  • 蓝桥杯-蓝桥幼儿园(并查集)
  • 采用小程序远程控制LED灯亮灭
  • 数据库中的数组: MySQL与StarRocks的数组操作解析
  • Pytorch的安装和使用
  • 深入解析 Jenkins Agent 的 .jnlp 启动文件
  • MuJoCo 仿真 + TOPPRA 最优时间轨迹规划!机械臂运动效率拉满(附代码)
  • 小刚说C语言刷题——第18讲 循环之while和do-while语句
  • 深入理解Spring IoCDI
  • Pandas 库
  • Streamlit性能优化:缓存与状态管理实战
  • Elasticsearch:加快 HNSW 图的合并速度
  • 自己搭建cesium应用程序
  • 河道违建检测数据集VOC+YOLO格式223张1类别
  • spdlog C++日志库使用教程
  • 试剂SYBR 14核酸染料在染色时的操作步骤(说明)
  • 【python3】关于像素密度计算
  • AI大模型从0到1记录学习 day15
  • 白宫启动“返乡计划” ,鼓励非法移民自愿离开美国
  • 悬疑推理联合书单|虫神山事件
  • 英国和美国就关税贸易协议条款达成一致
  • 44岁街舞运动推广者、浙江省街舞运动协会常务理事钟永玮离世
  • 明星站台“胖都来”背后:百元起录视频,20万可请顶流
  • 普京:“胜利日停火”已开始生效