面向对象的编程.子类的字段

Fin*_*sky 2 java oop

我创建了一个类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字段并将其仅添加到它的子类中.

谢谢.

JB *_*zet 8

主要问题不是head字段的声明类型,而是其运行时类型.如果子类是唯一一个创建自己的顶点的子类,那么它可以BinaryTree.Vertexhead变量赋值.但是,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.