我在使用Java中的嵌套类时遇到了麻烦,有谁知道为什么Java不允许我这样做?
public class A{
private class B{
public B(){
System.out.println("class B");
}
}
public static void main(String[] args){
A a = new A();
B b = new B();
}
}
答案 0 :(得分:8)
因为您试图从静态方法访问非静态内部类。
第一个解决方案是将您的内部班级B
更改为static
:
public class A{
private static class B {
public B() {
System.out.println("class B");
}
}
public static void main(String[] args){
A a = new A();
B b = new B();
}
}
可以从任何地方访问static
内部类,但非静态内部类需要容器类的实例。
另一种解决方案是:
A a = new A();
B b = a.new B();
这将使您更好地理解内部类在Java中的工作方式:http://www.javaworld.com/article/2077411/core-java/inner-classes.html
答案 1 :(得分:7)
A a = new A();
B b = a.new B();
可以解决您的问题
您使用了私有内部类。如何在A类之外获取实例?
public class JustForShow {
public class JustTry{
public JustTry() {
System.out.println("Initialized");
}
}
public static void main(String[] args) {
JustForShow jfs = new JustForShow();
JustTry jt = jfs.new JustTry();
}
}
答案 2 :(得分:4)
您正尝试从静态方法访问非静态元素。要解决这个问题,您有两种选择:
将您的班级B
更改为静态,因此请在班级定义中添加static
关键字,如下所示:
public static class B { // ...
更改主要方法,并使用创建的实例a
创建B
,如下所示:
B b = a.new B();
如果B
不使用类A
的任何非静态资源,我建议使用第一种方法。
答案 3 :(得分:1)
public static void main(String[] args){
A a = new A();
A.B b = a.new B();
}