1

我正在尝试在 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

我在 Interface2 文件中显示了 5 个递归方法,它们都得到了同样的错误。感谢您的任何帮助。

更新:我很犹豫是否发布接口课程,因为它们来自大学课程,我不想让讲师感到不安。具有讽刺意味的是,非递归方法工作得很好。这是 Interface2 文件显示的一小部分内容:

public interface BinarySearchTreeInterface2<T>{

    public int getNumberOfNodes();

    public int getHeight();
4

2 回答 2

2

似乎getLeftSubTree()返回一个BinarySearchTreeInterface1<T>. 但是 getHeight() 是在 中定义的BinarySearchTreeInterface2<T>,所以不能对 的结果调用 getHeight() 方法getLeftSubTree()

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

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

当然,也必须对getRightSubTree().

于 2012-12-01T21:29:12.407 回答
0

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

请记住,声明为由方法返回的类型可以是它实际返回的类型的超类型(例如和接口) 。所以可以声明 BinarySearchTreeInterface1<T> getLeftSubTree()(它不实现BinarySearchTreeInterface2),并实际返回一个BinarySearchTree<T>(它实现)——并得到你上面描述的错误。

于 2012-12-01T21:30:25.783 回答