Java面向对象之多态与重写

引入

多态

  • 我们之前举得例子中,遍历输出Arraylist<People> peoples中的内容,内容中既持有Student类的对象,又有持有Teacher类的对象,而且我们输出的对象并不是一串对象所在的地址,而是对象的内容,这是因为我们在People的子类Student和Teacher中都创建了toString方法,在输出时持有子类对象的父类引用调用了子类的toString方法 ,那么对于People类的Arraylist<People> peoples容器中的Student对象和Teacher对象来说,遍历出的内容会自动匹配相对应的其类中toString方法进行输出,当子类中没有该方法的重写才会去调用基类中的toString方法,也就是输出对象所在的地址,这种特性就叫做多态。

重写

  • 而在每个子类中都有一个和基类Object中的toString方法重名的方法,并且在方法体上方都标注了@Override,这时就是在子类中对父类方法进行了重写

  • 多态是java的一种特性,持有子类对象的父类引用访问子类中的方法,在不同的子类中如果有同名的方法会自动匹配,也就是持有子类的父类对象调用和父类的同名的子类方法,此时会根据调用对象的特征(持有的是哪个类型的子类)呈现多种状态。

java 复制代码
// 定义抽象类
abstract class Animal {
    public abstract void makeSound();
}

// 定义具体子类
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow!");
    }
}

// 使用抽象类引用
public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();  // 使用抽象类引用指向具体子类对象
        Animal myCat = new Cat();

        myDog.makeSound();  // 输出 "Woof!"
        myCat.makeSound();  // 输出 "Meow!"
    }
}

形成条件

  • 实现多态,必须要存在继承的关系
  • 父类变量必须持有了子类的对象
方法的重写
  • 对于抽象类子类中必须重写父类的方法(即为必须都要有这个方法),没有只需return null即可,但子类必须有,重写即为子类中方法的名字,参数列表必须时相同的,这样才可以达成覆盖父类的方法。这一过程就是方法的重写(toSting方法似乎可以在父类中没有方法体也能实现多态)

注释@Override的重要性

  • 注意被重写的方法最好加上注释@Override,这样ide可以帮我们检查父类中有没有该方法,没有会提醒我们要加上。
相关推荐
IT策士13 小时前
Django 从 0 到 1 打造完整电商平台:个人中心与用户信息修改
后端·python·django
小明同学0113 小时前
C++后端项目:统一大模型接入 SDK(五)
服务器·c++·后端·计算机网络·语言模型
SimonKing13 小时前
IP定位库的完美替代品:ip2region,开源、免费!
java·后端·程序员
XiYang-DING13 小时前
【Spring】Lombok
java·后端·spring
ZC跨境爬虫13 小时前
模块化烹饪小程序开发日记 Day5:(后端Flask接口开发与AI智能解析菜谱的实现)
前端·人工智能·后端·python·ui·flask
Yeats_Liao13 小时前
物联网接入层技术剖析(一):从select到epoll
java·linux·后端·物联网·struts
小钻风336613 小时前
Spring Boot WebSocket 两种集成方式深度解析
spring boot·后端·websocket
IT_陈寒13 小时前
Vite热更新失效?我在这坑里卡了一下午
前端·人工智能·后端
云烟成雨TD13 小时前
Spring AI Alibaba 1.x 系列【55】Interrupts 中断机制:静态中断源码分析
人工智能·后端·spring
我命由我1234514 小时前
PHP - PHP 基本随机数生成函数
开发语言·ide·后端·java-ee·php·intellij-idea·intellij idea