鉴于声明
A m = new B();
并且知道B类是A类的子类,而A是Object的子类, 解释在评估陈述时会发生什么。
非常感谢提前!
答案 0 :(得分:1)
最简单的答案是,由于B是A的子类,因此评估可以正常进行。
指向基类的指针可以指向派生类,因为派生类是基类的实例。
让我们再展开一下这个例子:
A m;
B n = new B();
m = n; // Valid statement
m = n是一个有效的语句,因为我们只能将一个A对象分配给m。编译器看到B派生自A,因此它实际上是A对象。如果它是一个不相关的类型,编译器会对你大喊大叫。
答案 1 :(得分:0)
m
的变量,其类型为A
B
类型的对象m
分配了对创建对象的引用您可以在没有演员表的情况下引用m
,就好像它是A
类型一样。这意味着您可以调用A
中定义的任何方法;如果它们被覆盖,则调用B
的方法版本。但是,除非使用强制转换,否则不能调用任何特定于B
的方法。
答案 2 :(得分:0)
RTTI
就是这个词。运行时类型标识。
我推荐Bruce Eckel的“Thinking in Java”