Java和超级跳过一个级别

Java and skipping a level with super

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why is super.super.method(); not allowed in Java?

如果您有一个派生自另一个类的类,我是否可以调用super.super方法而不是被重写的方法?

1
2
3
4
5
6
7
8
9
10
11
class A{
    public void some(){}
}

class B extends A{
    public void some(){}
}

class C extends B{
    public void some(){I want to call A.some();}
}


看:为什么是Super?Super?方法();在Java中不允许?


@Tganblin是对的,但这里有一个解决方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A{
    public void some(){ sharedCode() }
    public final void someFromSuper(){ sharedCode() }

    private void sharedCode() { //code in A.some() }
}

class B extends A{
    @Override
    public void some(){}
}

class C extends B{
    @Override
    public void some(){
     //I want to call A.some();
     someFromSuper();
    }
}

在中创建方法的第二个最终版本(不可重写),并从C调用它。

这实际上是一个糟糕的设计,但有时需要在JDK内部使用。

当做,圣潘