class Demo{
         static int i = 5;
         public static class I1{
                 public  class I2{
                         public class I3{
                                 public I3(){
                                         System.out.println("读到我啦");
                                 }
                         }
                                 
                }
         }
 }
 
class Demo1{
         public static void main(String[] args){
                 //要怎么才能读到I3?
         }
 }

解决方案 »

  1.   

    I1.I2.I3 i3 = (new I1().new I2()).new I3();static内部类可以直接new,非static内部类需要实例new,所以I1可以直接new,后面的I2,I3需要上层的外部类的实例来new,new I1()返回I1的实例,所以new I1().new I2()就是通过返回的I1的实例来调用new I2()来生成I2的实例,I3依次类推话说,没事写这么深层的内部类,有点自找麻烦
      

  2.   

    8好意思,把Demo给忽略了
    Demo.I1.I2.I3 i3 = (new Demo.I1().new I2()).new I3();