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


编译看左边,运行看右边
//父类的引用指向子类
//子类能调用的方法都是自己的或者继承自父类的
Student s1 = new Student();
//父类可以指向子类,但不能调用子类独有的的方法(可以调用子类重写的)
Person s2 = new Student();
Object s3 = new Student();
注意点
- 多态是方法的多态,没有属性的多态
- 父类和子类,有联系 类型转换异常:ClassCastException
- 存在条件:继承关系,方法需要重写,父类引用指向了子类对象
不能被重写的方法:
1.static方法,属于类,而不属于实例。
2.final 常量
3.private 私有方法
Instance of和类型转换
- instanceof引用类型比较,判断一个对象是什么类型

总结
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();
- 方便方法的调用(转型),减少重复的代码,简洁

浙公网安备 33010602011771号