面向对象——多态(包含instance of和类型转换)

多态

  • 即同一方法可以根据发送对象的不同而采用不同的行为方式
  • 多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。
  • 一个对象的实际类型是确定的,但可以指向对象的引用类型可以有很多
  • 多态存在条件
    • 有继承关系
    • 子类重写父类的方法
    • 父类引用指向子类对象
      实现方式:重写、接口、抽象类和抽象方法

image

image
编译看左边,运行看右边

//父类的引用指向子类
        //子类能调用的方法都是自己的或者继承自父类的
        Student s1 = new Student();
        //父类可以指向子类,但不能调用子类独有的的方法(可以调用子类重写的)
        Person s2 = new Student();
        Object s3 = new Student();

注意点

  1. 多态是方法的多态,没有属性的多态
  2. 父类和子类,有联系 类型转换异常:ClassCastException
  3. 存在条件:继承关系,方法需要重写,父类引用指向了子类对象

不能被重写的方法:

1.static方法,属于类,而不属于实例。

2.final 常量

3.private 私有方法

Instance of和类型转换

  • instanceof引用类型比较,判断一个对象是什么类型

1595939583793

总结

1.编译看左边,运行看右边。

2.比如Person X = new Student(),左边Person是引用类型,右边Person是实际类型。

3.x instance of Y,首先看X的类型(就是引用类型Person)和Y有没有继承关系,没有就直接报错,有的话进入下一步。

4.然后判断X的实际类型(就是右边的Student(),是不是Y本身或者它的子集,是就True,不是就False。

5。实际类型不能是Y的父类,不然直接false。

  • 类型转换
    • 父类引用指向子类的对象
    • 把子类转换为父类,向上转型,低转高,自动转换,会丢失自己原来的一些方法(因为父类调用低级需要强制转换)
    • 把父类转换为子类,向下转型,强制转换,前面加个(),才调用子类方法((Student)obj).go();
    • 方便方法的调用(转型),减少重复的代码,简洁
posted @ 2022-08-19 20:31  Fred不想做咸鱼  阅读(53)  评论(0)    收藏  举报