内部类可以是静态的,也可以用 public default protected private 修饰,而外部类只能用 public default 修饰;
内部类的成员变量,方法名可以与外部类相同;
编译成功后会出现 Outer.class 和 Outer$Inner.class 两个类;
2. 外部类访问内部类
外部类不能直接使用内部类的成员和方法,必须先使用外部类对象来创建内部类对象;
classout{voidm(){
System.out.println("out");}classin{voidm(){
System.out.println("in");}}}publicclasstest{publicstaticvoidmain(String[] args){//创建内部类的对象//方法1
out.in i =newout().newin();//方法2
out o =newout();
out.in i =o.newin();
i.m();}}
定义在方法或一个作用域内,像方法内的一个局部变量一样,不能用 public protected private static 修饰;
publicclasstest{voidinternalTracking(boolean b){if(b){classin{//局部内部类}}}voidtrack(){internalTracking(true);}publicstaticvoidmain(String[] args){
test t1 =newtest();
t1.track();}}
6. 静态内部类
加 static 的内部类是静态内部类,在没有外部类的对象时也可以直接创建静态内部类的对象,
不能直接访问外部类的非静态成员变量或方法,但可以创建外部类对象来访问;
classout{int o =2;staticclassin{int i =1;voidin(){
System.out.println(i);
System.out.println(newout().o);}}}publicclasstest{publicstaticvoidmain(String[] args){
out.in i =newout.in();//这里引用了外部类,与非静态内部类创建对象:out.in i = new out().new in();不同
i.in();}}