Heres код:Может ли кто-нибудь объяснить мне этот результат полиморфизма?
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();
}
}
И Heres выход:
Data1=20
Data2=20
In A=10
In B=20
Выход на Data1 = 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, потому что вы обновляете поле так, чтобы оно использовало значение объявленного поля, а не значение поля в суперклассе. На самом деле вы должны попытаться избежать дублирования имен полей (имена полей, которые существуют в суперклассе, а также подкласс), потому что это может избежать много путаницы. –