Joh*_*oth 10 java super superclass
在下面的示例中,如何从类C的方法method()中访问A?
class A {
public void method() { }
}
class B extends A{
public void method() { }
}
class C extends B{
public void method() { }
void test() {
method(); // C.method()
super.method(); // B.method()
C.super.method(); // B.method()
B.super.method(); // ERROR <- What I want to know
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
在范围内不能访问类型B的封闭实例
答:不,这是不可能的.Java不允许它.类似的问题.
Jon*_*eet 17
你不能 - 而且非常刻意.它会违反封装.你会跳过任何B.method想要做的事情 - 可能验证参数(假设有任何参数),强制执行不变量等.
B如果任何派生类可以跳过它定义的任何行为,你怎么能期望保持对它的世界的一致视图?
如果B提供的行为不适合C,则不应扩展它.不要试图像这样滥用继承.
Mot*_*Mot 12
以下代码可能是一个解决方法(不好,但应该工作):
class A {
public void method() { }
}
class B extends A {
public void method() { }
protected void superMethod() {
super.method();
}
}
class C extends B {
public void method() { }
void test() {
method(); // C.method()
super.method(); // B.method()
superMethod(); // A.method()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24097 次 |
| 最近记录: |