Java - 扩展整个类层次结构

标签 java inheritance abstract-class multiple-inheritance

我有一个这样的类层次结构:

abstract class BaseThing
{
    public abstract void doSomething();
}

class Thing1 extends BaseThing
{
    @Override
    public void doSomething()
    {
        doSomethingWithThing1();
    }
}

class Thing2 extends BaseThing
{
    @Override
    public void doSomething()
    {
        doSomethingWithThing2();
    }
}

// A dozen more classes that extend the BaseThing class. 

我需要创建整个树的扩展版本。 Java中没有多重继承,所以我将其创建为:

interface BaseThingExt
{
   public void doSomethingElse();
}

class Thing1Ext extends Thing1 implements BaseThingExt
{
    @Override
    public void doSomethingElse()
    {
        doSomethingElseWithThing1();
    }
}

//   All Thing.. classes are extended by ThingExt... classes

现在问题来了。 我可以在哪里放置所有 ThingExt 类的一些公共(public)字段?我无法将它们放置在基本接口(interface)中,因为它们将成为 final static。我无法将 BaseThingExt 设为抽象类,因为 Java 不支持多重继承。我不敢相信唯一的解决方案就是在所有 ThingExt 类中将它们复制十几次!

编辑:请注意,所有 ThingExt 类都应该扩展其相应的 Thing 类,而不仅仅是 BaseThing 类,因为每个派生类都有一些细节。所以答案是@Hamdi Douss行不通的。

最佳答案

通常的技巧是使用组合而不是继承:

interface BaseThingExt
{
   public void doSomethingElse();
}

class ConcreteImplementation implements BaseThing, BaseThingExt {

    private final BaseThing thingDelegate;
    private final BaseThingExt extDelegate;

    public ConcreteImplementation(BaseThing thing, BaseThingExt ext) {
        this.thingDelegate = thing;
        this.extDelegate = ext;
    }


    @Override
    public void doSomething() {
        thingDelegate.doSomething();
    }

    @Override
    public void doSomethingElse() {
        extDelegate.doSomethingElse();
    }
}

关于Java - 扩展整个类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36965154/

相关文章:

java - Android Recyclerview 滚动更新日历

C++ 继承 基类使用派生类的成员

C++继承问题错误C2084函数已经有一个主体

c++ - 为什么 C++ 中类的大小取决于数据成员的公共(public)/私有(private)状态?

c++ - 如何在 C++ 中为抽象基类创建池分配器?

java repaint 屏蔽了 jbutton

java - while循环只执行一次

java - 使用 Spring Security 进行 JUnit 测试

c++ - 抽象类和派生类的输出运算符(<<)

Java: new AbstractClass(){} 这个声明叫什么?