接口方法中的递归

时间:2012-12-01 21:09:02

标签: java recursion

我正在尝试在searchTree类中编写递归方法,并且出于某种原因,这些方法在接口中的类外部查找方法的定义,而不是查看自己。以下是代码的一些片段:

主要课程中的

    public class BinarySearchTree<T extends Comparable<T>> implements BinarySearchTreeInterface1<T>, BinarySearchTreeInterface2<T>{`
Main中的

递归方法:

    public int getHeight(){
        if (isEmpty()){
            return 0;
        }else{
            int height = 1 + Math.max(this.getLeftSubTree().getHeight(),
                                      this.getRightSubTree().getHeight());
            return height;
        }
   }`

如您所见,我有两个接口类。该错误强调了getHeight()和状态:

cannot find symbol
symbol: method getHeight()
location: interface BinarySearchTreeInterface1<T>
where T is a type-variable:
 T extends Comparable<T> declared in class BinarySearchTree

我有2个在Interface2文件中显示的递归方法,所有这些方法都得到了同样的erorr。感谢您的帮助。

更新:我对于发布接口类非常犹豫,因为他们来自大学班级,我不想打扰讲师。具有讽刺意味的是,非递归方法工作得很好。以下是Interface2文件显示的一小部分:

public interface BinarySearchTreeInterface2<T>{

    public int getNumberOfNodes();

    public int getHeight();

2 个答案:

答案 0 :(得分:2)

似乎getLeftSubTree()返回BinarySearchTreeInterface1<T>。但getHeight()在BinarySearchTreeInterface2<T>中定义,因此无法在getLeftSubTree()的结果上调用方法getHeight()。

您可以通过覆盖getLeftSubTree()方法来编译程序,如下所示:

public BinarySearchTree<T> getLeftSubTree() {
    ...
}

当然,同样必须使用getRightSubTree()

答案 1 :(得分:0)

错误表示getLeftSubTree() 声明要返回的类型未实现getHeight()

请记住,方法返回的声明类型可以是实际返回的类型的超类型(例如,接口)。所以可以申报 BinarySearchTreeInterface1<T> getLeftSubTree()(未实现BinarySearchTreeInterface2), 并实际返回BinarySearchTree<T>(确实如此) - 并获得您在上面描述的错误。