2010-05-11 3 views
1

J'ai ClassA et ClassB, avec ClassA étant la superclasse.Est-il possible d'utiliser l'héritage dans cette situation? (Java)

La classe A utilise le noeud A, la classe B utilise le noeud B.

Premier problème: paramètres de la méthode. ClassB a besoin de types NodeB, mais je ne peux pas passer de la sous-classe à la superclasse. Cela signifie que je ne peux pas définir les propriétés qui sont uniques à NodeB.

Deuxième problème: Lorsque j'ai besoin d'ajouter des noeuds àClasseB, je dois instancier un nouveau noeudB. Mais, je ne peux pas le faire dans la super-classe, donc je devrais réécrire l'insertion pour utiliser NodeB.

Y a-t-il un moyen de contourner le problème ou est-ce que je vais devoir réécrire le tout?

+0

NodeA est-il une super-classe de NodeB? –

+0

Parlez-vous d'une hiérarchie parallèle? Pouvez-vous être plus concret? – andyczerwonka

+0

oui, c'est une hiérarchie parallèle et oui, NodeA est une superclasse de NodeB –

Répondre

1

La meilleure solution à votre dilemme, je pense, est d'utiliser des génériques: mettez le code commun dans une superclasse commune (éventuellement abstraite) paramétrée, par exemple, par NodeType. Chacun de A et B peuvent sous-classer respectivement CommonSuper<NodeA> et CommonSuper<NodeB>, et remplacer si nécessaire pour faire quelque chose de spécifique à leur type de nœud individuel. De cette façon, vous aurez très peu de duplication dans votre code, tout en étant capable d'accomplir tout ce dont vous avez besoin.

1

Peut-être que vous cherchez quelque chose comme ça?

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); } 
} 

Est-ce ce que vous demandez, à peu près?

En particulier, notez comment ClassB écrase addNode pour renvoyer la sous-classe, et setProperties sont "chaînés" pour définir les propriétés de NodeB le cas échéant.

Questions connexes