类型比较运算符 instanceof 与 多态 类型转换的一些现象
多态
关于多态的描述可以看之前的文章
https://blog.csdn.net/norang/article/details/110943231
从中而知
多态的出现有三个前提,1.具有继承和实现之一 2.要有方法的重写或实现 3.用 超类或接口来声明子类的对象。
类型比较运算符 instanceof
总的来说,instanceof运算符的作用就是,
boolean a=obj instanceof Class
假如左边的 obj对象能够转换成右边的Class 类型的数据,则返回true, 否则 返回 false。
public class Dog extends Pet implements Animal{
public static void main(String[] args) {
Pet pet=new Pet();
System.out.println(pet);
System.out.println(pet instanceof Dog); //返回 false
((Dog)pet).play(); //编译期时,不会报错,但在 运行期,会报错。
}
}
也就是 Pet父类型对象,无法转换成Dog对象。虽然Pet与Dog有继承关系。
从另一个方面,作为子类Dog拥有的数据范围,本身就比父类的Pet大,这种转换的不可行,也有了一定的依据。
有什么不懂的,建议直接看官方文档
https://docs.oracle.com/javase/specs/index.html