我知道如何创建内部类的实例。但我想知道为什么我们不能通过以下方式做到这一点:
class outerclass{
public static void main(String[] args){
innerclass in=new innerclass();
}
class innerclass{
}
}
如果我这样做,则会收到以下错误:
No enclosing instance of type outerclass is accessible. Must qualify the allocation with an enclosing instance of type outerclass (e.g. x.new A() where x is an instance of outerclass).
为什么?
最佳答案
class Demo{
public static void main(String[] args){
System.out.println(innerclass.a);
}
static class innerclass{
static int a=1;
}
}
给出输出 1。
看这里在把内部类设为static的时候你可以很容易的在你的外部类中访问,为了创建一个嵌套类的实例你必须通过在它前面加上外部类名来引用它,像这样:
Outer.Nested instance = new Outer.Nested();
非静态嵌套类(内部类) Java 中的非静态嵌套类也称为内部类。内部类与封闭类的实例相关联。因此,您必须首先创建封闭类的实例才能创建内部类的实例。这是一个内部类定义示例:
public class Outer {
public class Inner {
}
}
下面是创建内部类实例的方法:
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
注意如何在外部类的引用之后放置 new 以创建内部类的实例。
非静态嵌套类(内部类)可以访问封闭类的字段,即使它们被声明为私有(private)。这是一个例子:
public class Outer {
private String text = "I am private!";
public class Inner {
public void printText() {
System.out.println(text);
}
}
}
关于java - 为什么我们不能以常规方式在外部类的主要方法中创建内部类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39328107/