Java中的内部/静态嵌套类 - 外部类'名称

时间:2017-04-02 19:42:05

标签: java inner-classes static-classes

我想询问在引用内部类或静态嵌套类时是否需要显式写入外部类的名称。

例如:

class B {
    static class Inner {
        int a = 10;
    }
}

class Test extends B {
    public static void main(String[] args) {
        Test t = new Test();
        Inner obj = new Inner();
        System.out.println(obj.a);
    }
}

我想问的是,在什么情况下需要写:

B.Inner obj = new B.Inner();

而不是

Inner obj = new Inner();

2 个答案:

答案 0 :(得分:1)

对于静态嵌套类(正如G.Fiedler在答案中提到的那样),当你在new Inner()的范围内时,你可以写B

您也可以在Inner内直接引用Test,因为它会延伸B

在所有其他情况下,您需要说B.Innernew B.Inner()

内部类 - 根据定义不是static - 以不同方式初始化。让我们看一下这个例子B

class B {
    public class Inner {
        ...
    }
}

内部类总是与外部类的实例绑定。这意味着在这种情况下,必须有B的实例才能让我们实例化Inner。所以,让我们这样做:

B b = new B();

我假设我们目前位于B 范围之外的某个地方

为了创建Inner的实例,我们使用B的实例并写:

B.Inner inner = b.new Inner();

如果我们在B内(在非静态方法中),我们可以简单地写

Inner inner = new Inner();

因为我们 - 或者更确切地说是编译器 - 知道B的实例必须存在才能与inner绑定。

答案 1 :(得分:0)

如果您在T范围内,则可以使用class Bnew Inner()之外必须使用。