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

我创建了一个简单的列表类。我想要做的是在 SLList 中创建一个方法来给大小一个 SLList 对象。我想递归地执行它,但是,我创建的以下 size() 方法不起作用。我知道实现它的其他方法,例如创建辅助方法。但我很好奇的是为什么我的 size() 不起作用?错误消息是“SLList.IntNode 的 size() 未定义”。为什么?既然我将嵌套的 IntMode 类设为 public 和 non-static,为什么它不能使用 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 的新手,对私有和静态的东西很困惑,尤其是在涉及到类时。谢谢有人回答我。


慕的地6264312
浏览 180回答 4
4回答

守着星空守着你

您可以通过添加一个额外的私有方法来调整它,但这并不是特别容易推理。除非绝对必要,否则我会避免这样做。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();    }}

当年话下

向 IntNode 类添加一个 size 方法,并从 SLList size 方法访问它以计算列表的整个大小。以下代码片段是不言自明的。有关嵌套类的更多信息,请参阅https://www.programiz.com/java-programming/nested-inner-classpublic class SLList {    public class IntNode {        public int item;        public IntNode next;        public IntNode(int i, IntNode n) {            item = i;            next = n;        }        public int size() {            IntNode tmp = next;            if (tmp == null) {                return 1;            }            return 1 + tmp.size();        }    }    private IntNode first;    public SLList(int x) {        first = new IntNode(x, null);    }    public int size() {        if (first == null)            return 0;        return first.size();    }    public static void main(String[] args) {        SLList list = new SLList(10);        list.first.next = list.new IntNode(20, null);        list.first.next.next = list.new IntNode(30, null);        list.first.next.next.next = list.new IntNode(40, null);        System.out.println(list.size());    }}

慕姐4208626

size()是一种方法SLList,不是IntNode。您可以参考内部的外部类方法IntNode,如下所示:public class SLList {    public class IntNode {        ...        public int size() {            return SLList.this.size();        }    }    ...    public static int size() {        ...    }}

三国纷争

原因是:您的方法size()在SLList类中。因此它不能被nested inner class IntNode.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java