我在单独的文件中有2个类。
public class A
{
private int _x;
public A (int x)
{
_x = x;
}
public int getX()
{
return _x;
}
public int doubleX()
{
return 2 * getX();
}
}
public class B extends A
{
private int _x;
public B(int xA, int xB)
{
super(xA);
_x = xB;
}
}
单独文件中的主要方法...
public static void main(String[] args)
{
A a = new A(1);
A b = new B(2,22);
System.out.println(b.doubleX());
}
可以使用相同的名称。它被称为隐藏权? 但是B类不能从A继承私有字段 如上所示,可以在B的构造函数中调用super吗?
我读了很多文章并研究了遗产。 只是想让事情变得清晰。
答案 0 :(得分:2)
它被称为隐藏权?
不,A
的{{1}}仅对_x
隐藏,因为它B
中的private
。它可以是A
或protected
,因此public
可以访问B
,因为您已使用super._x
中的声明对其进行了隐藏,并且它不会不做任何改变。
但是类
B
无法继承B
的私有字段,可以在A
的构造函数中调用super
,如上所示?
B
无法查看 B
中的私有_x
,因为它是私有的,但 继承它。 A
也可以拥有自己的B
(私有或其他),两者完全没有冲突 - _x
实例都有。请注意,B
是 B
。
这可能有助于为您澄清事情:
A
运行的输出是:
this.getX() = 42, this.x = 67
如您所见,该实例包含public class Example {
public static final void main(String[] args) {
(new B(42, 67)).show();
}
static class A
{
private int x;
protected A(int arg) {
this.x = arg;
}
protected int getX() {
return this.x;
}
}
static class B extends A
{
private int x;
public B(int arg1, int arg2) {
super(arg1);
this.x = arg2;
}
public void show() {
System.out.println("this.getX() = " + this.getX() + ", this.x = " + this.x);
}
}
}
个成员,x
和A$x
。