内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并且控制位于内部的类的可视性。但是内部类是完全不同于组合的概念。
在最初,内部类看起来就像是一种代码隐藏机制:将类置于其他类的内部。但是,内部类远不止于此,它了解外围类,并能与之通讯,而且你用的内部类写出的代码更优雅而清新。
1 package innerclasses; 2 3 public class Parcel2 { 4 class Contents{ 5 private int i = 11; 6 public int value(){ 7 return i; 8 } 9 } 10 11 class Destinations{ 12 private String lable1; 13 Destinations(String whereTo){ 14 lable1 = whereTo; 15 } 16 String reabLable1(){ 17 return lable1; 18 } 19 20 } 21 public Destinations to(String s){ 22 return new Destinations(s); 23 } 24 public Contents contents(){ 25 return new Contents(); 26 } 27 public void ship(String dest){ 28 Contents c = new Contents(); 29 Destinations d = new Destinations(dest); 30 System.out.println(d.reabLable1()); 31 } 32 33 public static void main(String[] args){ 34 Parcel2 p = new Parcel2(); 35 p.ship("Tasmania"); 36 Parcel2 q =new Parcel2(); 37 Parcel2.Contents c = q.contents(); 38 Parcel2.Destinations d = q.to("Borneo"); 39 } 40 41 }
结果
1 Tasmania
如果想从外部类的非静态方法之外的任意位置创建某个内部类对象,那么有必须像在main()中那样,具体的指明这个对象的类型:OuterClassName.InnerClassName。