[英]Extending classes with inner-classes (and also extending the inner-classes when going from one class to another) in java
我遇到嵌套类和子类之间的关系问题。 请考虑以下代码:
class Graph {
class Edge {
...
}
class Vertex {
List<Edge> _edges;
...
}
...
}
class WeightedGraph extends Graph {
class WeightedEdge extends Edge {
...
}
...
}
问题是,在为WeightedGraph编写方法时,我无法访问_edges; 编辑说它无法从Edge类型转换为WeightedEdge。 我想我还必须扩展嵌套类Vertex,因为在Graph中它使用类型Edge,而在WeightedGraph中它必须使用类型WeightedEdge。 什么是一个很好的方法来做到这一点(没有重新编写代码)?
你有_edges
声明为成员Graph.Vertex
。 只有Vertex
或其子类具有该成员。 如果你想让你的类拥有它,你也需要子类化Vertex
。
编辑:听起来你有一个额外的问题,有合作和逆转。 问题是基类被声明为包含具有泛型类型Edge
的列表。 虽然你可以在其中存储WeigtedEdges
,但是如果没有WeigtedEdges
,你将无法恢复它们,因为所有编译器都知道它包含常规Edges
。
我不记得关于泛型的确切规则,但我相信这些内容可能有所帮助。 或者,您可以咬住子弹并添加额外的演员阵容。 泛型的目的是帮助添加一些额外的编译时类型检查,但是当它阻碍时,你可以忽略它。 唯一的风险是错误更容易入侵,因为只会在运行时检查类型。
class Vertex <T extends Edge> {
List<T> _edges;
...
}
class WeightedVertex extends Vertex<WeightedEdge> {...}
您可以定义从WeightedGraph
访问Vertex
类字段的方法。
就像是:
class Graph
{
...
protected List<Edge> getVertexEdges(Vertex v)
{
return v._edges;
}
}
因此,您可以在子类中使用此帮助程序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.