从另一个类调用内部类成员

时间:2013-12-12 06:55:31

标签: java

如果这个问题很愚蠢,请原谅我,因为我对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();

抛出错误。所以请帮助我专家。

5 个答案:

答案 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();
}

}