Java和跳过一个级别的超级

Java和跳过一个级别的超级,java,Java,可能重复: 如果您有一个从另一个派生的类派生的类,我是否可以调用super.super方法而不是重写的方法 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();} } 请参阅:@tgamblin是正确的,但这里有一个解决方法: class A

可能重复:

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

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();}
} 

请参阅:

@tgamblin是正确的,但这里有一个解决方法:

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内部使用

问候,, 圣菲