1. 关于多态中类型的问题
Worker manager = new Manager();
System.out.println(manager instanceof Manager);
Manager a = (Manager)manager;
这段代码演示了 Java 中的 向上转型(upcasting) 和 向下转型(downcasting) ,以及 instanceof 的用法。
我听到一种说法是,在编译时,manager的类型是看左边,也就是Worker,为什么这里又manager instanceof Manager判断为真?instanceof内部原理是什么样的?
"编译时类型" vs "运行时类型"
在编译时,class文件会把manager的类型声明为Worker,但实际在做instanceof时,代码正在运行,instanceof会去内存中查询对应堆的头,其存在一个指向class文件的指针,然后判断指针指向的类型是否与instanceof前的实例类型相同,而这里的指针的指向是在new时决定的
2. 如果创建实例时,传入了子类的独有属性,在不去向下转型时,能拿到吗?
Worker manager = new Manager("属性1","属性2","属性3");
// 假设属性3key为property3,且为Manager独有属性
System.out.println(manager.property3); // 报错
不能拿到,因为代码先编译在运行,编译时,他会根据左边Worker类去查有没有这个属性,没有就报错了