Java(八):方法覆盖

方法覆盖

什么时候需要用到方法覆盖呢?

当从父类中继承过来的方法无法满足当前子类的业务需求时。

比如说,我现在有一个动物类,它有一个方法是 移动。

java 复制代码
public class Animal {
    private String name;
    
    public Animal(){}
    
    public Animal(String name) {
        this.name = name;
    }
    
    public String getName(){
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public void move(){
        System.out.println(this.name + "正在动");
    }
}

但是,如果我现在要创建一个动物是鸟继承了父类动物,但它的移动应该是 飞 而非 简单的移动,这时候就需要用到方法覆盖,将继承自父类的方法给重新写一下。

java 复制代码
public class Bird extends Animal{
    private String name;

    public Bird(String name) {
        this.name = name;
    }
    
    public Bird(){}


    @Override
    public String getName() {
        return this.name;
    }
    @Override
    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public void move(){
        System.out.println(this.name + "正在飞翔...");
    }
}

发生方法覆盖的条件?

  • 具有继承关系的父子类之间
  • 相同的返回值类型,相同的方法名,相同的形式参数列表
  • 访问权限不能变低,可以变高。
  • 抛出异常不能变多,可以变少。
  • 返回值类型可以是父类方法返回值类型的子类。

其他细节

  • @Override注解标注的方法会在编译阶段检查该方法是否重写了父类的方法。
  • 私有方法不能继承,所以不能覆盖。
  • 构造方法不能继承,所以不能覆盖。
  • 静态方法不存在方法覆盖,方法覆盖针对的是实例方法。
  • 方法覆盖说的实例方法,和实例变量无关。
相关推荐
lili0012几秒前
CC GUI 插件架构剖析:如何为 JetBrains IDE 打造完整的 AI 编程工作台
java·ide·人工智能·python·架构·ai编程
Royzst4 分钟前
学生信息管理案例
java
爱棋笑谦6 分钟前
单元测试简述
java
音符犹如代码14 分钟前
Docker 一键部署带有 TimescaleDB 插件的 PostgreSQL
java·运维·数据库·后端·docker·postgresql·容器
sleepcattt25 分钟前
Java反射技术
java
小锋java123426 分钟前
【技术专题】Spring AI 2.0 - Advisors —— 拦截器模式增强AI能力
java·人工智能
AI人工智能+电脑小能手26 分钟前
【大白话说Java面试题 第56题】【JVM篇】第16题:JVM有哪些垃圾收集器?
java·开发语言·jvm·面试
二哈赛车手1 小时前
新人笔记---简易版AI实现以图搜图功能
java·人工智能·笔记·spring·ai
夕除1 小时前
spring boot 6
java·spring boot·后端
johnrui1 小时前
JUC之AQS
java·开发语言·jvm