如果这个问题很愚蠢,请原谅我,因为我对JAVA程序完全不熟悉。我正在研究嵌套类的概念,并遇到以下程序。
// Demonstrate an inner class.
class Outer {
int outer_x = 100;
void test() {
Inner inner = new Inner();
inner.display();
}
// this is an inner class
class Inner {
void display() {
System.out.println("Display: outer_x = " + outer_x);
}
}
}
class NestedClass {
public static void main(String args[]) {
Outer outer = new Outer();
outer.test();
// Inner inner = new Outer().Inner();
// inner.display();
}
}
我怀疑如何从Inner
访问NestedClass
班级的成员。在“Java - 完整参考”中,给出了"You can, however, create an instance of Inner outside of
Outer by qualifying its name with Outer, as in Outer.Inner"
。但是,如果我尝试使用它,
Inner inner = new Outer().Inner();
inner.display();
抛出错误。所以请帮助我专家。
答案 0 :(得分:5)
您需要使用Inner
关键字创建新的new
个实例。
Inner inner = new Outer().new Inner(); // "new" keyword is required to create a new Inner instance.
如果您没有添加import com.java.test.Outer.Inner;
的导入,请添加它。或者,你可以做这样的事情
Outer.Inner inner = new Outer().new Inner();
答案 1 :(得分:3)
Outer st = new Outer();
Outer.Inner fl = st.new Inner();
请注意,无论main()
方法是否在outer class
(因为main是静态方法),甚至在其他类中,上述代码都完全相同。其他一些类只有在有权访问外部类时才能运行代码。但是,Outer Class将具有默认或包访问权限,因为在声明Outer Class时未指定访问修饰符。这实质上意味着与OuterClass在同一个包中的任何类都可以运行上面的代码而没有任何问题。
答案 2 :(得分:2)
首先必须创建外部类的实例。之后,您可以通过外部类'instance。
创建该嵌套内部类的实例Outer outer = new Outer();
Outer.Inner a = outer. new Inner();
a.display();
答案 3 :(得分:1)
使用此:
Outer.Inner inner=new Outer().new Inner();
因为你需要创建Inner类的对象,因为它不是静态的内部类。
所以你的代码变成了:
class NestedClass {
public static void main(String args[]) {
Outer outer = new Outer();
outer.test();
Outer.Inner inner = outer.new Inner();
inner.display();
}
}
答案 4 :(得分:1)
Inner class
只能通过live instance of outer class
访问。
试试这个:
class NestedClass {
public static void main(String args[]) {
Outer outer = new Outer();
outer.test();
Outer.Inner inner = outer.new Inner();
inner.display();
}
}