Java学习 第十三天 多态

1. 什么是多态

  • 对象的多种形态

2. 多态的前提

  • 有继承、实现关系
  • 有父类引用指向子类对象
  • 有方法的重写

3. 多态的好处

  • 使用父类型作为参数,可以接受所有子类队形,体现多态的扩展性与便利性

代码示例

public class Test {
    public static void main(String[] args) {

        Person p1 = new Admin();
        p1.setName("Sam");
        p1.setAge(19);
        Person p2 = new Teacher();
        p2.setName("Jack");
        p2.setAge(30);
        Person p3 = new Person("Wiston", 23);
        register(p1);
        register(p2);
        register(p3);
    }

    //这个方法既能接收老师,又能接收学生,还能接收管理员
    //只能把这个参数写成这三个类型的父类
    public static void register(Person person) {
        person.show();
    }
}

运行结果

管理员的信息为:Sam,19
老师的信息为Jack,30
Wiston,23



  • 多态的调用成员的特点

变量调用:编译看左边,运行也看左边
方法调用:编译看左边,运行看右边

Animal animal = new Dog();
//现在是用a去调用变量和方法
//而a是Animal类型的,所有默认会从Animal当中去找

理解
成员变量:在子类的对象当中,会把父类的成员变量继承下的,父类:成员变量。子类:成员变量
成员方法:如果子类对方法进行方法重写,那么是会把虚方法表当中父类方法进行覆盖

  • 多态的弊端

不能调用子类的特有方法
在编译的时候要先检查父类有没有这个方法,没有就会报错

  • 解决方案
    变回子类类型就可以
Animal animal = new Dog();

//从父类的animal变回子类的dog就可以
//转换的时候不能乱转换,不然会报错 (报错类转换异常)
Dog dog = (Dog) animal;

//可以用类型判断,判断animal是否是Dog类型
if (animal instanceof Dog)

posted @ 2025-03-22 10:13  无敌的二进制  阅读(7)  评论(0)    收藏  举报