【问题标题】:Java: Call a base super class method while skipping intermediate inherited super classes [duplicate]Java:在跳过中间继承的超类时调用基超类方法[重复]
【发布时间】:2015-01-14 18:06:42
【问题描述】:

假设我有三个班级:

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 中的代码。

有没有办法做到这一点?

【问题讨论】:

  • 我不认为有一种语言结构可以做到这一点,但你可以通过一些重构来做到这一点。
  • 我从你那里得到的最直接的问题是,“为什么?”如果您不想使用B 的构造函数中发生的事情,那么为什么C 扩展B 而不是A?当您遇到此类问题时,您需要退后一步并重新检查您的方法是否真的是最清晰和最直观的。
  • 对不起,不是构造函数,而是方法。虽然不同,但同样的问题仍然适用。
  • 我问的原因是我用于我正在构建的应用程序的框架具有多次继承的类。我无法直接对这些类进行更改,但我需要访问超类中的方法,而不使用中间超类中的代码。如果这有意义的话。

标签: java inheritance methods


【解决方案1】:

简短的回答是否定的。你看到的是你的设计有缺陷。这表明您也需要将 A 类中的代码移到辅助类中。然后 B 和 C 将通过组合使用它。您可以尝试使用部分来获得您想要的行为。有关更多详细信息,请参阅此链接。 Partial function application in Java 8

【讨论】:

    【解决方案2】:

    你可以在 C 中实例化一个类 A 的对象并调用方法方法

    class C extends B
    {
        @Override
        public void method()
        { /* I want to use the code specific to A without using B */ 
        A test = new A();
        test.method();
        }
    
    }

    不确定这是否是您的意思。还假设你忘记了 A 类中的方法名method。

    【讨论】:

      【解决方案3】:

      不,没有办法做到这一点。您可以简单地在类B 中创建另一个方法来执行A 方法的代码,然后在子类C 中调用该方法。

      【讨论】:

        猜你喜欢
        • 2011-10-17
        • 1970-01-01
        • 2018-01-05
        • 1970-01-01
        • 1970-01-01
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 2019-01-19
        相关资源
        最近更新 更多