我知道如何创建内部类的实例。但我想知道为什么我们不能通过以下方式做到这一点:
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).
为什么?
答案 0 :(得分:3)
class Demo{
public static void main(String[] args){
System.out.println(innerclass.a);
}
static class innerclass{
static int a=1;
}
}
给出输出1。
在将内部类设置为静态时看到这里您可以在外部类中轻松访问,为了创建Nested类的实例,您必须通过在前面添加Outer类名称来引用它,如下所示:
Outer.Nested instance = new Outer.Nested();
非静态嵌套类(内部类) Java中的非静态嵌套类也称为内部类。内部类与封闭类的实例相关联。因此,您必须首先创建封闭类的实例以创建内部类的实例。以下是内部类定义的示例:
public class Outer {
public class Inner {
}
}
以下是创建Inner类实例的方法:
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
注意如何在引用外部类之后将new放入以创建内部类的实例。
非静态嵌套类(内部类)可以访问封闭类的字段,即使它们被声明为私有。这是一个例子:
public class Outer {
private String text = "I am private!";
public class Inner {
public void printText() {
System.out.println(text);
}
}
}
答案 1 :(得分:1)
您的innerclass
不是静态的。这意味着它必须具有对外部类的引用。 main
是静态的,没有隐式外层。
简单的解决方案是使您的内部类成为静态嵌套类。
答案 2 :(得分:0)
您必须使内部类静态(如前所述)或从非静态上下文创建内部类,例如来自非静态方法。
即。要么:
int solutions_count = 0;
int n = 0;
const m = 10;
solution = []
while(solutions_count < m) {
if(fulfills_f(n)) {
solution += [n, f(n)]
solutions_count++;
}
n++;
}
或者
class outerclass{
void myMethod() {
innerclass in = new innerclass();
}
class innerclass{
}
}
答案 3 :(得分:0)
outerclass
的 innerclass
未实例化,因此,直接调用innerclass
会抛出错误,因为没有outerclass
附加innerclass
。< / p>
因此,如前面的答案所示,使innerclass
静态可以解决问题,允许在没有实例化的情况下访问innerclass
。
关于这个主题,有很多现有的答案。一个快速谷歌提出了这一点。