1
我已经找遍了所有的问题找到我的简单问题的答案,但我可能只是不理解所提供的解决方案,或者我没有在正确的条件下搜索。我有一个并行继承层次结构,有两个抽象基类,每个都有可能有很多孩子。伪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"
}
}
泛型是我的第一个想法。不知道Java中的协变返回类型。这很酷! –
@MikeParkhill:仅供参考,方法和构造函数也可以有协变异常类型。有关详细信息,请参阅Java 7 JLS的第8.4.8.3节。 –