面向对象 -多态注意点

2022-07-14  本文已影响0人  Eqo

多态:指的是同一种事务(或者对象)的 在不同时刻表现出来的不同状态

多态的前提:

1.类与类之间存在继承关系
2.子类重写父类方法
3.父类引用指向子类对象

多态的体现

多态成员的访问方式

成员变量

Animal an = new Cat();
System.out.println(an.name);

成员方法
编译看左边 运行看右边(编译方法看左边,运行方法要看右边的子类当中的方法)

多态的好处

// 多态的应用 可拓展性,传入不同的对象 实现功能不同
    public static void main(String[] args) {
        Animal cat = new Cat();
        Animal dog = new Dog();

        show(cat);//小猫
        show(dog);//狗
        
    }
    public static void show (Animal an){

        System.out.println("-----调用方法");
        an.eat();
    }

父类
abstract class Animal {
    private String name = "动物";
    public abstract  void eat();
}
子类
public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}
public class Cat extends Animal {
    private String name ="小猫";
    @Override
    public void eat(){
        System.out.println("小猫爱吃鱼");
    }
}

多态的弊端

父类引用不能访问子类的特有功能. 怎样解决 通过向下转型 实现
问题 父类引用指向子类对象是向下转型, 如果我此时只想调用子类的特有方法 需要向下转型 (强转)

    public static void main(String[] args) {
        Animal cat = new Cat();
        Animal dog = new Dog();

      cat =  show(cat);//小猫
        show(dog);//狗
        //如果我想使用子类特有方法 向下转型 经常用 因为你一个
        Dog dog1 = (Dog) dog;
        dog1.call();
    }
上一篇 下一篇

猜你喜欢

热点阅读