为什么主函数不能实例化内部类?

时间:2017-09-13 14:22:06

标签: java

class Outer{
    int i = 60;

    class Inner{
        void display(){
            System.out.println(i);
        }
    }

    public static void main(String args[]){
        Inner o = new Inner();
        o.display();
    }
}

主函数实例化它的非静态类,而当实例化内部类(非静态)时,java编译器会显示错误(如上面的代码)。为什么呢?

编辑:我不是在问如何实例化内部类。我只是想要一个逻辑上的理由,为什么main()没有实例化它的内部类,而下面的函数呢。

class Outer{
    int i = 60;
    void show(){
        Inner k = new Inner();
        k.display();    
    }

    class Inner{
        void display(){
            System.out.println(i);
        }
    }
    public static void main(String args[]){
        Outer o = new Outer();
        o.show();
    }
}

6 个答案:

答案 0 :(得分:1)

Outer类也必须实例化:

Inner o = new Outer().new Inner();

答案 1 :(得分:1)

您需要有父类的引用。

public static void main(String args[]){
    Inner o = new Outer().new Inner();
    o.display();
}

答案 2 :(得分:1)

你需要一个(封闭的)Parent类的实例,因为子类实例不能存在于它自己的实例中,例如:

Outer outer = new Outer();
Inner o = outer.new Inner();
o.display();

答案 3 :(得分:0)

Java docs说:

  

InnerClass的一个实例只能存在于一个实例中   OuterClass并且可以直接访问其方法和字段   封闭实例。

     

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

     

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

所以你可以尝试:

Inner o = new Outer().new Inner();

答案 4 :(得分:0)

来自Java Tutorials

  

静态嵌套类

     

与类方法和变量一样,静态嵌套类与其外部类相关联。和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法:它只能通过对象引用来使用它们。

     

内部课程

     

与实例方法和变量一样,内部类与其封闭类的实例相关联,并且可以直接访问该对象的方法和字段。此外,因为内部类与实例相关联,所以它本身不能定义任何静态成员。

因此,如果您希望能够实例化内部类,则需要具有外部类的实例。在实例方法中,您不需要它,因为您总是指这个'这个'

答案 5 :(得分:0)

因为Class的静态方法和属性属于Class而不属于Class的实例。因此,只能与Class的其他静态方法和属性进行交互。