How do I access the super-super class, in Java? [Mini-example inside]
本问题已经有最佳答案,请猛点这里访问。
在下面的示例中,如何从
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 } } |
我得到的错误是
No enclosing instance of the type B is
accessible in scope
号
答:不,这是不可能的。Java不允许这样做。类似的问题。
你不能-而且非常刻意。这将违反封装。您将跳过
如果任何派生类可以跳过它定义的任何行为,您怎么能期望
如果B提供的行为不适合C,则不应扩展它。不要这样滥用遗产。
下面的代码可能是一种解决方法(不好,但应该有效):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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() } } |
嗯,没有直接的方法可以做到这一点,但你可以尝试解决方法。
我不确定从类C访问类A中的方法的目的,但您始终可以掌握该方法。
您可以在类C中创建类A的实例,如果这看起来太简单,请尝试使用反射API…[链接文本][1]
极端爪哇
你不应该。
如果您想访问
当
例如,假设您有一个实现列表的类,
所以,简而言之,就是不要。