主要是这一句Inner i = hello.new Inner(); 如果把new当作一个内存分配的标识的话,是不是可以认为内部类其实并没有在内存中重新获取内存,而是使用的外部类的内存 并且是调用内部类的时候i.show();,显然并没有通过外部类来进行调用这是为什么呢?
成员内部类需要先创建外部类,才能创建它自己的,这是因为每一个内部类都保存了一个对外部类的一个引用。这很好理解,因为你要实例化这个内部类,肯定是通过外部类的一个实例,而内部类保留的这个引用就是这个外部类实例。可以类比一下方法,你怎么使用一个类里面定义的xxx()方法?肯定是先new一个对象hello,然后再hello.xxx() 这样使用方法。你在定义一个内部类的时候,默认会生成此内部类的构造方法,如何使用此构造方法呢?跟使用普通方法一样。
因为你这个show方法本来就是定义在内部类的,没必要通过外部类的对象来调用啊。而且外部类也不能直接访问和使用内部类的对象和方法,必须通过内部类的对象访问。。。