子类变量没有将变量隐藏在超类中

时间:2014-07-28 16:25:10

标签: java class member-hiding

我刚学会了如果有两个变量,一个在超类中,一个在子类中,它们共享相同的名称,子类中赋值给变量的值将隐藏超类中变量的值。我已经写了一个程序来检查出来,但是输出显然表明任何隐藏过程都没有发生或是否真的发生了?如果子类隐藏了超类中的变量,“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

2 个答案:

答案 0 :(得分:3)

A.a不应该返回25,因为A的类型是超类型Super,并且没有隐藏。这就是A.a返回10的原因。

仅在B.a隐藏a(因为B的类型为something,其扩展Super并隐藏成员a),这就是为什么它返回25。

答案 1 :(得分:0)

是的,子类中的“a”隐藏了超类中的“a”。这就是为什么你在子类的构造函数中分配“a”的原因。