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但NUMT從A2運行HELLO()?
據我所知,我繼承了A2進入B2,而C2進入了B2。然後在我的主要中,我創建了一個類C2的對象(它可以做,因爲A2是C2的超類)。 然後在編譯時代碼沒有滿足時沒有錯誤。 在運行時,程序查找'hello()',其中'obj'指的是引用而不是定義的位置。 但它對'numt'做了相反的處理。這是爲什麼?我的上述理解是否正確?如果不是,請糾正。
非常感謝!我知道這是一個新手問題,我對OOP很陌生。
+1我只是補充說,多態*只適用於不是final,static或private的方法*,它*不適用於字段*(這就是爲什麼OP得到111而不是666)。 – Pshemo
@Pshemo:重要要點。感謝您添加評論。 – kosa
好的,所以'A2 obj = new C2();'意思是obj是指A2?我認爲它是指C2。 – user1265125