我正在尝试在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();
答案 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>
(确实如此) - 并获得您在上面描述的错误。