你有区分 静态类型 的
aObj和 运行时类型 的
aObj。
代码如
A aObj = new B();
产生
aObj具有静态类型
A和运行时类型的变量
B。
在决定允许或不允许的内容时,编译器也只会考虑 静态类型 。
对您的问题:
1.为什么我无法通过aObj访问该变量,尽管它引用的是B类?
因为有(一般)没有办法让编译器 知道
那
aObj会是指一个
B对象在运行时,只知道它会是指某种形式的
A对象。由于
.b并非在所有
A对象上都可用,因此编译器会认为
“安全胜于遗憾” 并不允许这样做。
2.为什么我可以使用show()方法?
由于这种方法 是 在所有可用的
A对象(如果它没有在子类中声明,它仍然继承自
A)。



