【问题标题】:Static nested class vs non static error? [duplicate]静态嵌套类与非静态错误? [复制]
【发布时间】:2017-07-27 09:55:36
【问题描述】:

我使用了以下代码,它在指示的地方给了我一个错误:

class LinkedList{
    class pair{
            Integer petrol;
            Integer distance;

            public pair (Integer a, Integer b){
                    petrol = a;
                    distance = b;
            }
    }

    public static void main(String args[]){
            pair[] circle = {new pair(4,6), new pair(6,5), new pair(7,3), new pair(4,5)}; // error at first element of array circle!!!!!!!
    }
}

然后我对此进行了纠正,错误消失了!

class LinkedList{
    static class pair{ // changed to static!!!
        Integer petrol;
        Integer distance;

        public pair (Integer a, Integer b){
            petrol = a;
            distance = b;
        }
    }

    public static void main(String args[]){
        pair[] circle = {new pair(4,6), new pair(6,5), new pair(7,3), new pair(4,5)}; //error gone!
    }
}

我的问题是为什么错误甚至首先出现?

错误:无法访问 LinkedList 类型的封闭实例。必须 使用 LinkedList 类型的封闭实例来限定分配。

【问题讨论】:

  • 没有 static 关键字,pair 成为 LinkedList 的内部类,这意味着每个 pair 对象必须与封闭的 LinkedList 类的实例相关联。

标签: java class static nested


【解决方案1】:

在情况 1 中,pairLinkedList 的成员。这意味着您只能通过 LinkedList 访问对,而不是像该类的任何变量或方法那样直接访问。

nested class 是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无法访问封闭类的其他成员。

要实例化内部类,必须先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

但是,在情况 2 中,pair 就像任何其他顶级类一样,只是分组以保持关系。它根本不是外部类的成员。您可以直接访问它。

注意:static nested class 与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,为了方便打包,它已经嵌套在另一个顶级类中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    相关资源
    最近更新 更多