繼承人的代碼:有人可以解釋我這種多態性的輸出嗎?
class A{
int data=10;
void show1(){
System.out.println("In A="+data);
}
}
class B extends A{
int data=20;
void show2(){
System.out.println("In B="+data);
}
}
public class Overriding4 {
public static void main(String args[]){
B b=new B();
System.out.println("Data1="+b.data);
System.out.println("Data2="+b.data);
b.show1();
b.show2();
}
}
而且繼承人的輸出:
Data1=20
Data2=20
In A=10
In B=20
在數據1 = 20的輸出應該是10,不是20 ...但我覺得我失去了一些東西。請幫我這個
好了,感謝您的幫助,但一個新的疑問:如果 我改變的主要方法會發生什麼:
public static void main(String args[]){
A a=new B();
System.out.println("Data1="+a.data);
System.out.println("Data2="+a.data);
a.show1();
a.show2();
}
你去那裏。
你爲什麼認爲它應該是'10'? –
爲什麼'Data1'必須是10? –
它是20,因爲您重新聲明瞭該字段,因此它使用的是聲明字段的值,而不是超類中字段的值。實際上你應該嘗試避免重複的字段名稱(超類和子類中存在的字段名稱),因爲它可能會避免很多混淆。 –