1

目前正在学习内部类。我有两节课。第二类有一个内部类。我正在尝试在第二类中创建内部类的对象。但我收到编译错误。任何人都可以帮忙吗?

这是我的代码:

public class MainClass {

    public static void main(String[] args) {

        NestedClass.NewUser newUserObj = new NewUser("User");
        System.out.println(newUserObj.Name);
    }
}

class NestedClass {

    class NewUser {
        public String Name;

        NewUser(String name) {
            this.Name = name;
        }
    }
}
4

4 回答 4

6

要实例化内部类,您必须先实例化外部类。

使用外部对象创建内部对象,如下所示:

NestedClass.NewUser newUserObj = (new NestedClass()).new NewUser("User");

参考:http ://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

于 2013-10-27T13:43:03.427 回答
2

您只能使用 的实例创建 的NewUser实例NestedClass

new NestedClass().new NewUser("User");
于 2013-10-27T13:43:10.977 回答
2

尽管名称NestedClass不是嵌套类而是外部类,所以NestedClass需要一个实例来创建真正的嵌套类的实例,即NewUser

NestedClass.NewUser newUserObj = new NestedClass().new NewUser("User");
于 2013-10-27T13:45:36.243 回答
2

备选方案:制作内部类static。然后,从技术上讲,它不再是“内部”类,而只是一个“嵌套”类,您可以使用new NestedClass.NewUser(). 正如嵌套类教程中所解释的,静态嵌套类可以在没有封闭类的实例的情况下实例化,就像其他答案所指的那样。

于 2013-10-27T13:46:35.770 回答