0

我刚刚了解到,如果有两个变量,一个在超类中,一个在子类中,它们共享相同的名称,分配给子类中变量的值将隐藏超类中变量的值。我已经编写了一个程序来检查它,但输出清楚地表明任何隐藏过程都没有发生或者真的发生了?如果子类隐藏超类中的变量,“Aa”和“Ba”的值应该是 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
4

2 回答 2

3

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

只有B.a隐藏了a(因为 B 是something扩展Super和隐藏 member的类型a),这就是它返回 25 的原因。

于 2014-07-28T16:29:45.643 回答
0

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

于 2014-07-28T16:33:00.793 回答