Java:在跳过中间继承的超类时调用基超类方法

Java:在跳过中间继承的超类时调用基超类方法,java,inheritance,methods,Java,Inheritance,Methods,假设我有三门课: class A { public void method() { /* Code specific to A */ } } class B extends A { @Override public void method() { /*Code specific to B*/ super.method(); } } class C extends B { @Override pub

假设我有三门课:

class A
{
    public void method()
    { /* Code specific to A */ }
}

class B extends A
{
    @Override
    public void method()
    { 
       /*Code specific to B*/
       super.method(); 
    }
}

class C extends B
{
    @Override
    public void method()
    { /* I want to use the code specific to A without using B */ }
}
本例的目标是使用A中的代码而不使用B中的代码。我认为有一种方法可以通过调用super方法来实现,但这也带来了B中的代码


有办法做到这一点吗?

简单的回答是没有。你看到的是你的设计有缺陷。它表示您也需要将类A中的代码移出到帮助器类中。然后B和C将通过合成使用它。您可以尝试使用partials来获得所需的行为。有关更多详细信息,请参阅此链接

不,没有办法。您只需在类
B
中创建另一个方法,该方法执行
A
方法的代码,并在子类
C
中调用该方法。您可以在C中实例化类A的对象并调用该方法

C类扩展了B类
{
@凌驾
公开作废法()
{/*我想使用特定于A的代码,而不使用B*/
A测试=新的A();
试验方法();
}

}
我认为没有语言构造可以做到这一点,但是你可以通过一点重构来实现。我从你那里得到的直接问题是,“为什么?”如果你不想使用
B
的构造函数中发生的事情,那么
C
为什么扩展
B
而不是
a
?当你遇到这样的问题时,你需要后退一步,重新检查你的方法是否真的是最清晰直观的。对不起,不是构造函数,而是方法。尽管有相同的区别,但同样的问题仍然适用。我提出这个问题的原因是,我正在构建的应用程序所使用的框架具有多次继承的类。我不能直接对这些类进行更改,但我需要从一个超类访问一个方法,同时不使用中间超类的代码。如果这有道理的话。