Java-多态性-instanceof关键字的使用
一、多态性
若编译时类型和运行时类型不一致,就出现了对象的多态性(运行时类型)
- 1.理解多态性:可以理解为一个事物的多种形态
- 2.对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
- .多态性的使用前提:1.类的继承关系 2.方法的重写
- 对象的多态性,只适用于方法,不适用于属性(编译运行都看左边)
二、多态性的应用
多态小结
- .多态作用提高了代码的通用性,常称作接口重用
- 前提:一、类的继承二、方法重写
- 成员方法(类的方法):
编译时:要查看引用变量所声明的类中是否有所调用的方法。
运行时:调用实际new的对象所属的类中的重写方法 - 成员变量(类的属性):
- 不具备多态性,只看引用变量所声明的类
三、instanceof的使用
对象的多态性:父类的引用指向子类的对象
有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。
-
a instanceof A:判断对象a是否是类A的实例
-
使用情景:
为了避免向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型 -
举例一:
Person p3 = new Woman();
Man m3 = (Man)p3;//不同子类 -
举例二:
Person p4 = new Person();
Man m4 = (Man)p4;//new的必须是下面的类,功能多 -
举例三:
Object obj = new Woman();
Person p = (Person)obj;//可以