????1??????????

???????????????????????????????????????

???????? OuterClassName.InnerClassName inner=new Ouer().new Inner();

??????????????.new ????????????private inner class ?????????????????????private?????private?????????default??protected??public???????????

????????? ?????????get InnerInstance()

????????????????????????????????г?????????

????????????????????????????????????????????????????private?????private?????private??????

????2???????????????

???????棬????????????????SamePackage.java?????????Out????????????

????SamePackage.java

package com.zj.main;
 
public class SamePackage {
    public static void main(String[] args) {
       // create an outer object
       Out out = new Out();
     
       //create a private inner object by 'new'
       //Out.PrivateIn privateIn=out.new PrivateIn();
       //->error: Out.PrivateIn is not visible.
 
       // create a default inner object by 'new'
       Out.DefaultIn defaultIn = out.new DefaultIn();
       //defaultIn.private_arg=0;->error:not visible
       defaultIn.default_arg = 0;
       //defaultIn.private_method();->error:not visible
       defaultIn.default_method();
 
       // create a private inner object by 'out's method'
       //Out.PrivateIn privateIn2 = out.getPrivateIn();
       //->error:Out.PrivateIn is not visible through out.getPrivateIn() is visible.
     
       // create a private inner object by 'out's method'??
       // but use Interface reference to handle it
       InMethod privateIn=out.getPrivateIn();
       privateIn.public_method();
    }
}

??????????OuterClassName.InnerClassName inner=new Ouer().new Inner();

??????÷?????????private ??????????????ò?????????????

//create a private inner object by 'new'
//Out.PrivateIn privateIn=out.new PrivateIn();
//->error: Out.PrivateIn is not visible.

????????????????????default????????????????????????????????private?????private??????????protected??public???????????

????????????????????get InnerInstance()

??????????????????????getInnerInstance()????????????ò???private???????????????????????????private???????????

// create a private inner object by 'out's method'
//Out.PrivateIn privateIn2 = out.getPrivateIn();
//->error:Out.PrivateIn is not visible through out.getPrivateIn() is visible.