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();
}
}
答案 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)
InnerClass的一个实例只能存在于一个实例中 OuterClass并且可以直接访问其方法和字段 封闭实例。
要实例化内部类,必须首先实例化外部 类。然后,使用它在外部对象中创建内部对象 语法:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
所以你可以尝试:
Inner o = new Outer().new Inner();
答案 4 :(得分:0)
静态嵌套类
与类方法和变量一样,静态嵌套类与其外部类相关联。和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法:它只能通过对象引用来使用它们。
内部课程
与实例方法和变量一样,内部类与其封闭类的实例相关联,并且可以直接访问该对象的方法和字段。此外,因为内部类与实例相关联,所以它本身不能定义任何静态成员。
因此,如果您希望能够实例化内部类,则需要具有外部类的实例。在实例方法中,您不需要它,因为您总是指这个'这个'
答案 5 :(得分:0)
因为Class的静态方法和属性属于Class而不属于Class的实例。因此,只能与Class的其他静态方法和属性进行交互。