Действительно ли возможно использовать наследование в этой ситуации? (Java)

У меня есть ClassA и ClassB, при этом ClassA является суперклассом.

ClassA использует NodeA, ClassB использует NodeB.

Первая проблема: параметры метода. ClassB нужны типы NodeB, но я не могу бросить от подкласса до суперкласса. Это означает, что я не могу установить свойства, которые уникальны для NodeB.

Вторая проблема: Когда я должен добавить узлы toClassB, я должен инстанцировать нового NodeB. Но, я не могу сделать этого в суперклассе, таким образом, я должен был бы переписать вставку для использования NodeB.

Существует ли путь вокруг этого или я оказывающийся перед необходимостью переписывать все это?

1
задан they changed my name 11 May 2010 в 03:42
поделиться

2 ответа

Возможно, вы ищете что-то вроде этого?

class NodeA { ... }
class NodeB extends NodeA { ... }

class ClassA<N extends NodeA> {
    public Node newNode() { return new NodeA(); }
    public void setProperties(Node n) { setPropertiesA(n); }
}

class ClassB extends ClassA<NodeB> {
    @Override
    public NodeB newNode() { return new NodeB(); }
    @Override
    public void setProperties(NodeB n) { setPropertiesB(n); super.setProperties(n); }
}

Это примерно то, о чем вы просите?

В частности, обратите внимание, как ClassB переопределяет addNode для возврата подкласса, а setProperties «связаны» для установки свойств NodeB, когда это необходимо.

1
ответ дан 3 September 2019 в 00:40
поделиться

Лучшее решение вашего затруднительного положения, я думаю, - использовать обобщения: поместить общий код в (возможно абстрактный) общий суперкласс, параметризованный, скажем, NodeType . Каждый из A и B может создавать подклассы соответственно CommonSuper и CommonSuper и переопределять, где необходимо, делать что-то определенное для их индивидуального типа узла. Таким образом, у вас будет очень мало дублирования в вашем коде, но вы сможете выполнить все, что вам нужно.

1
ответ дан 3 September 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: