1.为什么要用到instanceof?
向上转型,是多态。
向下转型,为了防止编译错误,需要用到instanceof
向下转型需要记住,不是什么类都能强转的。必须是父与子的关系。所以我们用来对所有想要强转的类进行约束。
Dog dog = new Dog();
Animal animal = dog; // 向上类型转换
Dog dog2 = (Dog)animal; // 【正确强转】向下类型转换
// Cat cat = (Cat)animal; 【错误强转】,开辟的是Dog类型;编译时是Cat
// 类型,运行时是Dog类型 instanceof 就是为了规避这种强转,不是什么类都能强转的。
/*应用
*/
method(dog);
public void method(Animal animal) {
if(animal instanceof Dog) {
Dog dog2 = (Dog)animal; // 这时保证了向下类型转换是安全的
}
}
2.向上转型(多态)后用instanceof判断为什么是true?
先来一段代码。
Person p = new Person();
Person p = new Student();
System.out.println(p instanceof Person);
运行的结果是true。
一张图解释一下:
所以这里的=可不是赋值替换的意思哦,而是指向发生了改变。