Алмазное наследование в Java с абстрактными классами - PullRequest
0 голосов
/ 13 мая 2018

У меня есть задание с несколькими абстрактными классами, включая наследование, но у меня возникла проблема в определенном месте назначения.

Вот что у меня есть (близко к конкретному месту, где может возникнуть проблема):

public abstract class A {
    //some fields
    //constructor
    //some functions
}
public abstract class B extends A {
    //some fields
    //constructor
    //override functions
    //some new functions
}
public abstract class C extends A {
    //some fields
    //constructor
    //override functions
    //some functions
}
/* class D that extends both B and C */

Теперь мне нужно создать класс D, который расширяет класс B и C.
Я знаю, что множественное наследование не может быть использовано в Java, поэтому:

  1. Я думал о делегате DP, но я не могу создать 2 экземпляра классов B и C (ни расширить один, ни создать экземпляр другого, так как они оба являются абстрактными).
  2. Я также подумал, может быть, расширить класс более сложными функциями / более полями и создать интерфейс другого класса, но это заставит меня добавить все поля из этого класса в мой новый класс (я не думаю, что это "правильно" путь ").
  3. также я не уверен, что изменение одного из уже существующих классов - это то, что мне нужно сделать в качестве задания.

другими словами я потерян ...

1 Ответ

0 голосов

Вы не можете создать класс D, который расширяет как B, так и C.

Вместо этого рассмотрите возможность использования интерфейсов, таких как A, B, C, в качестве интерфейсов.

public interface A {
    //some functions
}
public interface B extends A {
    //some functions
}
public interface C extends A {
    //some functions
}
public abstract class D implements C,B {
    ...
}
...