这是一个简单的继承示例,其中有一个带阴影的变量x。
class A{
int x=1;
}
class B extends A{
int x=2;
}
class C extends B{
int x=3;
int y;
}
如何在C类中引用A类的阴影变量x?(我希望y=super.super.x;
之类的东西运行良好。)
答案 0 :(得分:2)
没有你想象的那么难。 (虽然我强烈建议避免这种情况,但如果你有一个继承自C
的班级B
,而班级A
继承自班级x
,所有这些班级都会实施公共字段{ {1}},然后使用super
通常是错误的方法。
相反,给定课程C
,请尝试以下方法:
((A)this).x; //don't forget the parentheses!
这将为x
提供A
的价值。此外,
super.x == ((B)this).x;
这通常是为什么,对于单个步骤,我们通常只使用super
。
希望这有帮助。
答案 1 :(得分:2)
据我所知,没有办法以你想象的方式实现这一目标。您最好的选择是在班级B
中实施一种访问方法:
class B extends A{
int x=2;
protected int getXFromA() {
return super.x;
}
}
通过这种方式,您可以从班级x
访问班级A
中定义的C
的值。
A
访问C
的成员?如果是这种情况,从OOP的角度来看,C
实际上不再被视为B
的正确子类。
答案 2 :(得分:1)
class A {
int x = 1;
}
class B extends A {
int x = 2;
}
class C extends B {
int x = 3;
int y = ((A) this).x;
}
请注意,由于可能造成混淆,通常不鼓励使用阴影。