继承人的代码:有人可以解释我这种多态性的输出吗?
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,因为您重新声明了该字段,因此它使用的是声明字段的值,而不是超类中字段的值。实际上你应该尝试避免重复的字段名称(超类和子类中存在的字段名称),因为它可能会避免很多混淆。 –