我刚学会了如果有两个变量,一个在超类中,一个在子类中,它们共享相同的名称,子类中赋值给变量的值将隐藏超类中变量的值。我已经写了一个程序来检查出来,但是输出显然表明任何隐藏过程都没有发生或是否真的发生了?如果子类隐藏了超类中的变量,“A.a”和“B.a”的值应该是25吗?请帮帮我。
注意:我是这个java编程的新手。请详细解释你的答案。谢谢
这是代码
public class Super {
int a;
Super(int x) {
a = x;
}
}
class something extends Super {
int a;
something(int x, int y) {
super(x);
a = y;
}
}
class mainclass {
public static void main(String args[]) {
Super A = new Super(10);
something B = new something(10, 25);
System.out.println("The value of a in super class is" + A.a);
System.out.println("The value of a in sub class is" + B.a);
}
}
输出在这里:
The value of a in super class is10
The value of a in sub class is25
答案 0 :(得分:3)
A.a
不应该返回25,因为A
的类型是超类型Super
,并且没有隐藏。这就是A.a
返回10的原因。
仅在B.a
隐藏a
(因为B的类型为something
,其扩展Super
并隐藏成员a
),这就是为什么它返回25。
答案 1 :(得分:0)
是的,子类中的“a”隐藏了超类中的“a”。这就是为什么你在子类的构造函数中分配“a”的原因。