class A2 {
int numt=111;
void hello() {
System.out.println("Hello from A2");
}
}
class B2 extends A2 {
void hello() {
System.out.println("Hello from B2");
}
}
class C2 extends B2 {
int numt=666;
void hello() {
System.out.println("Hello from C2");
}
}
class MethodOverriding2 {
public static void main(String args[]) {
A2 obj = new C2();
obj.hello();
System.out.println("Num is : " + obj.numt);
}
}
所以基本上这里的输出是
Hello from C2
Num is : 111
为什么它从 C2 运行 hello() 而从 A2 运行 numt?
据我了解,我将 A2 继承到 B2 中,并将 C2 继承到 B2 中。然后在我的主体中,我正在创建一个引用 C2 的 A2 类的对象(它可以这样做,因为 A2 是 C2 的超类)。然后在编译时没有错误,因为代码得到满足。在运行时,程序会在 'obj' 所指的地方而不是定义的地方查找 'hello()'。但它对“numt”却相反。为什么会这样?我的上述理解正确吗?如果不是,请更正。
非常感谢!我知道这是一个新手问题,我对 OOP 很陌生。