我创建了一个类Tree(数学表达式的抽象).它有嵌套类'Vertex'和字段'Vertex head'.另一类"二叉树"延伸树,但它有更多的可能性,因为它是二进制,他们有不同的顶点类(我加入到顶点方法giveRight和giveLeft),这就是为什么我使用嵌套类的继承.但是我有来自Tree head的字段,它没有方法giveRight等等......这是一个例子:
class Tree{
class Vertex{
//smth
}
Vertex head;
}
class BinaryTree extends Tree{
class Vertex extends Tree.Vertex{
//added methods...
}
//problem with head element, it is element of Tree.Vertex
}
Run Code Online (Sandbox Code Playgroud)
我对这个问题的面向对象部分是对的吗?或者我应该从Tree中删除head字段并将其仅添加到它的子类中.
谢谢.
主要问题不是head字段的声明类型,而是其运行时类型.如果子类是唯一一个创建自己的顶点的子类,那么它可以BinaryTree.Vertex为head变量赋值.但是,BinaryTree.Vertex如果要使用其他方法,则必须转换if.
要避免强制转换,可以使Tree类具有通用性:
public class Tree<V extends Vertex> {
protected V head;
}
public class BinaryTree extends Tree<BinaryVertex> {
}
Run Code Online (Sandbox Code Playgroud)
有关泛型的更多信息,请参阅javadoc.