当前位置: 首页 > 知识库问答 >
问题:

在java中,嵌套类对象可以使用封闭类方法吗?

帅锦
2023-03-14

我创建了一个简单的列表类。我想做的是在 SLList 中创建一个方法来为 SLList 对象提供大小。我想以递归方式执行此操作,但是,我创建的以下 size() 方法不起作用。我知道其他实现它的方法,例如创建一个帮助器方法。但我好奇的是,为什么我的尺寸()不起作用?错误消息是“大小 () 未定义为 SLList.IntNode”。为什么?既然我使嵌套的IntMode类只是公共的和非静态的,为什么它不能使用SLList类中定义的方法?

public class SLList {

    public class IntNode {

        public int item;
        public IntNode next;

        public IntNode(int i, IntNode n) {
            item = i;
            next = n;
        }
    }

    private IntNode first;

    public SLList(int x) {
        first = new IntNode(x, null);
    }

    public int size() {
        if (first.next == null) {
           return 1;
        }
        return 1 + first.next.size();
    }
}

我刚到Java,对私人和静态的东西很困惑,尤其是在课堂上。谢谢你回答我。

共有3个答案

狄凯
2023-03-14

大小()SLList 的方法,而不是整数节点。您可以按如下方式引用 IntNode 中的外部类方法:

public class SLList {

    public class IntNode {
        ...

        public int size() {
            return SLList.this.size();
        }
    }

    ...

    public static int size() {
        ...
    }
}
危卜鹰
2023-03-14

原因是:您的方法< code>size()在类SLList中。

因此,它不能由< code >嵌套内部类 IntNode访问。

朱承载
2023-03-14

您可以通过添加一个额外的私有方法来篡改它,但这并不特别容易推理。除非绝对必要,否则我会避免这样做。

class SLList {

    public class IntNode {

        public int item;
        public IntNode next;

        public IntNode(int i, IntNode n) {
            item = i;
            next = n;
        }

        private int theSize()
        {
            return size();
        }
    }

    private IntNode first;

    public SLList(int x) {
        first = new IntNode(x, null);
    }

    public int size() {
        if (first.next == null) {
            return 1;
        }
        return 1 + first.next.theSize();
    }
}
 类似资料:
  • 问题内容: 在Java中,内部类可以访问封闭类的私有成员。但是外层可以访问内层的私有成员吗?这与内部类是否静态无关。我认为这是不正确的,但是以下代码似乎可以编译并正常工作。 问题答案: 是的,没关系。从JLS,第6.6.1节中: 否则,如果声明了成员或构造函数,则仅当访问发生在封装成员或构造函数的声明的顶级类(第7.6节)的主体内时,才允许访问。 您甚至可以在另一个嵌套类型Y中引用嵌套类型X的私有

  • 问题内容: 谁能告诉我私人会员的访问级别?我一直对这段代码感到困惑:为什么可以在外部类的“打印”方法中访问Line类的私有成员k? 问题答案: 规则在有关可访问性的JLS章中 否则,如果声明了成员或构造函数,则仅当访问发生 在封装成员或构造函数的声明的顶级类(第7.6节)的主体内 时,才允许访问 。 在这里,成员字段在类中声明。当您在方法中访问它时,您正在 包含该 成员 的声明的顶级类的主体中对其

  • 问题内容: 这个错误是什么意思? 嵌套类型HelloWorld无法隐藏封闭类型 其中HelloWorld是Java文件名。这是您需要的代码: 问题答案: 您已经两次定义了HelloWorld类。删除一个级别,就可以了。

  • 问题内容: 动物是狗的超类,狗有一种叫bark的方法 考虑以下: 会发生什么? the assignment isn’t allowed the call to bark is allowed and “woof” is printed at run time the call to bark is allowed but nothing is printed the call to bark c

  • 如果不是这样,请给我一个简单的例子。

  • 问题内容: 在Oracle的Java 教程中,我找到了以下文本: 与类方法和变量一样,静态嵌套类与其外部类相关联。与静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法-它只能通过对象引用来使用它们。 注意:静态嵌套类与它的外部类(和其他类)的实例成员进行交互,就像其他任何顶级类一样。实际上,静态嵌套类在行为上是顶级类,为了包装方便,该顶级类已嵌套在另一个顶级类中。 静态嵌套类使用