【发布时间】:2013-08-23 17:18:53
【问题描述】:
代码如下:
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
Data1=20 的输出应该是 10 ,而不是 20 ......但我想我在这里遗漏了一些东西。请帮我解决这个问题
好的,感谢您的帮助,但有一个新疑问: 如果我将 main 方法更改为:
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,因为您正在重新声明该字段,因此它使用已声明字段的值,而不是超类中的字段值。您实际上应该尝试避免重复的字段名称(存在于超类和子类中的字段名称),因为它可能会避免很多混乱。
-
您重载了数据变量。如果您想要与方法名称不同的东西,请重命名它。如果您在扩展类中具有相同的方法/变量名称,它们就会重载。
-
您为什么认为
b.data是第一个println的一个值,而下一个println是一个不同的值?
标签: java polymorphism ocpjp