我已经到处寻找我的简单问题的答案,但我可能只是不理解所提供的解决方案,或者我没有按照正确的条款进行搜索。我有一个并行继承层次结构,有两个抽象基类,每个基类都可能有很多子类。伪UML:
Node -----------> NodeData
^ ^
| |
| |
SpecialNode -----> SpecialNodeData
由于一个类型的对象Node
引用了一个类型的对象NodeData
,当SpecialNode
想要访问一个唯一的方法时SpecialNodeData
,它不能。我理解这个错误,但我不确定如何修复它。我很想完全摆脱继承,但不确定如何并且仍然保留功能。我很欣赏任何见解(也许链接到有助于解决此类面向对象设计问题的教程?)
示例代码:
interface NodeData {
// methods
}
class Node {
protected NodeData data;
public Node(NodeData data) {
this.data = data;
}
// methods that use the generic NodeData
}
class SpecialNodeData implements NodeData {
int x;
public SpecialNodeData(int x) {
this.x = x;
}
/* Method unique to SpecialNodeData */
public int getx() {
return this.x;
}
// methods to implement generic NodeData
}
class SpecialNode extends Node {
public SpecialNode(int x) {
super(new SpecialNodeData(x));
}
public int getX() {
return data.getX(); // gives Eclipse a sad face:
// "the method getX() is undefined for the type NodeData"
}
}