从Java中的2个类扩展/继承

时间:2011-05-17 16:52:38

标签: java interface multiple-inheritance extend

我已经阅读了这个主题,似乎我最好的选择是创建一个我希望扩展到接口的类。

问题是ParentA是来自Android API的类,所以我实际上无法修改它(我只有构建版本),而ParentB是由朋友制作的,ParentB已经实现了Runnable(和AFAIK你可以'有一个实现另一个接口的接口..无论如何我都会遇到错误。)

2 个答案:

答案 0 :(得分:3)

您不能拥有实现其他接口的接口,因为接口与实现无关。但是,您可以使用扩展另一个界面的界面。您还可以拥有一个实现两个不同接口的类。

如果你的子类有两个潜在的父母并且他们没有相互继承,那么你需要问自己的是你的班级是ParentA还是父母B.哪一个更合适?一旦你决定,你将另一个变成哈萨。

所以,让我们说你决定你的班级是ParentA。您的代码可能类似于:

public class MyClass extends ParentA {

    private final ParentB runnable;
    private final Thread runningThread;

    public MyClass(ParentB runnable) {
        this.runnable = runnable;
        this.runningThread = new Thread(this.runnable);
    }

    public void start() {
        this.runningThread.start();
    }

    public void interrupt() {
        this.runningThread.interrupt();
    }

    public boolean isAlive() {
        return this.runningThread.isAlive();
    }
}

这里我委托线程方法而不是ParentB方法,因为这是你很可能想要在Runnable上控制的。如果ParentB有自己想要公开的行为,那么你也需要委托方法。

答案 1 :(得分:2)

在Java中,您可以扩展接口。

但对于您的情况,我建议使用聚合模式或委托模式。

查看Java设计模式:http://en.wikipedia.org/wiki/Delegation_(programming)