首页 > 解决方案 > 可以在不与封闭类的实例关联的情况下使用非静态成员类型吗?

问题描述

可以在不与封闭类的实例关联的情况下使用非静态成员类型吗?

例如

class Outer {    
    class Inner {       

    }    
}

public class Demo {
    public static void main(String args[]) {

        Outer o = new Outer();
        Outer.Inner inner = o.new Inner();    

    }    
}

Outer.Inner inner = o.new Inner()中,是否Outer.Inner使用Inner与封闭类的实例没有关联?

是否有其他示例可以在不与封闭类的实例关联的情况下使用非静态成员类型?

谢谢

标签: javainner-classes

解决方案


是否Outer.Inner使用Inner不关联到封闭类的实例?

从某种意义上说,是的,因为Outer.Inner指的是一个类型。而且你永远不需要实例来使用types

我认为您错误地认为这Outer.Inner不应该起作用,因为有无数种不同的Inner称为Outer. 您可能认为如果我有两个不同的Outer,o1和实例o2,它们将创建不同的Inner 类型

但这完全不正确。你完全可以这样做:

Outer o1 = new Outer();
Outer o2 = new Outer();
Outer.Inner inner1 = o1.new Inner();
Outer.Inner inner2 = o2.new Inner();
inner2 = inner1;

所以Outer.Inner只是一种类型。碰巧这种类型的实例需要一个实例Outer才能创建。


推荐阅读