可以将一个类的定义放在另一个类的定义内部,这就是内部类
public class Parcel {
class Contents{
private int i = 11 ;
public int value(){return i;}
}
class Destination{
private String label;
Destination(String whereTo){
label = whereTo;
}
String readLabel(){return label;}
}
public void ship(String dest){
Contents contents = new Contents();
System.out.println(contents.value());
Destination destination = new Destination(dest);
System.out.println(destination.readLabel());
}
public static void main(String[] args) {
Parcel parcel = new Parcel();
parcel.ship("Tasmaina");
}
}
当我们在ship()方法里面使用内部类的时候,与普通的类没有什么不同。在这里,实际的区别只是内部类的名字是嵌套在Parcel里面的。不过你将会看到,这并不是唯一的区别。
更典型的情况是,外部类将有一个方法,该方法返回一个指向内部类的引用,就像在to()和contents()方法中看到那样
public class Parcel2 {
class Contents{
private int i = 11;
public int value(){return i;}
}
class Destination{
private String label;
Destination(String whereTo) {
label = whereTo;
}
String readLabel(){ return label;}
}
public Destination to(String s){
return new Destination(s);
}
public Contents contents(){
return new Contents();
}
public void ship(String dest){
Contents contents = new Contents();
Destination destination = new Destination(dest);
System.out.println(destination.readLabel());
}
public static void main(String[] args) {
Parcel2 p = new Parcel2();
p.ship("Tasmania");
Parcel2 p2 = new Parcel2();
Parcel2.Contents contents = p2.contents();
Parcel2.Destination destination = p2.to("Borneo");
System.out.println(destination.readLabel());
}
}
如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象,那就必须像在main()方法中那样,具体地指明这个对象的类型OuterClassName.InnerClassName.