首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >接口方法中的递归

接口方法中的递归
EN

Stack Overflow用户
提问于 2012-12-02 05:09:02
回答 2查看 778关注 0票数 1

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

在主类中:

代码语言:javascript
运行
复制
    public class BinarySearchTree<T extends Comparable<T>> implements BinarySearchTreeInterface1<T>, BinarySearchTreeInterface2<T>{`

Main中的递归方法:

代码语言:javascript
运行
复制
    public int getHeight(){
        if (isEmpty()){
            return 0;
        }else{
            int height = 1 + Math.max(this.getLeftSubTree().getHeight(),
                                      this.getRightSubTree().getHeight());
            return height;
        }
   }`

如您所见,我有两个接口类。该错误突出显示getHeight()并声明:

代码语言:javascript
运行
复制
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文件显示的一小部分内容:

代码语言:javascript
运行
复制
public interface BinarySearchTreeInterface2<T>{

    public int getNumberOfNodes();

    public int getHeight();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-02 05:29:12

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

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

代码语言:javascript
运行
复制
public BinarySearchTree<T> getLeftSubTree() {
    ...
}

当然,getRightSubTree()也必须这样做。

票数 2
EN

Stack Overflow用户

发布于 2012-12-02 05:30:26

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13663755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档