расширить / наследовать от 2 классов в Java - PullRequest
1 голос
/ 17 мая 2011

Я прочитал эту тему, и мне кажется, что лучше всего сделать один из классов, которые я хочу расширить, в интерфейс.

Дело в том, что ParentA - это класс из API Android, поэтому я не могу изменить его (у меня есть только сборка), а ParentB создан другом, ParentB уже реализует Runnable (и AFAIK вы можете ' у меня нет интерфейса, который реализует другой интерфейс .. В любом случае я получаю ошибки).

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

У вас не может быть интерфейса, который реализует другой интерфейс, так как интерфейсы не имеют ничего общего с реализацией.Вы можете, однако, иметь интерфейс, который расширяет другой интерфейс.У вас также может быть класс, который реализует два разных интерфейса.

Когда у вас есть два потенциальных родителя для вашего подкласса, и они не подклассируют друг друга, вам нужно спросить себя, является ли ваш класс ParentA илиisa ParentB.Какой из них подходит лучше?Как только вы решите это, вы превратите другого в хасу.

Итак, допустим, вы решили, что ваш класс - это 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 имеет свое собственное поведение, которое вы хотите раскрыть, то вам также понадобятся методы делегирования.

2 голосов
/ 17 мая 2011

В Java вы можете расширить интерфейсы.

Но для вашего случая я бы предложил использовать шаблон агрегации или шаблон делегирования.

Посмотрите на шаблоны Java Design: http://en.wikipedia.org/wiki/Delegation_(programming)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...