先说明一个类名指定方式的问题。开门见山上代码!(以注释为重,多余代码忽略)
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 c = contents();
    Destination d = to(dest);
    System.out.println(d.readLabel());
  }
  public static void main(String[] args) {
    Parcel2 p = new Parcel2();
    p.ship("Tasmania");
    Parcel2 q = new Parcel2();
    Parcel2.Contents c = q.contents();
    Parcel2.Destination d = q.to("Borneo");
  }
}
我的疑问是:在eclipse上,将main函数中Parcel2.Contents c = q.contents();改为.Contents c = q.contents();并不会报错。这和书上说的不一样啊。书上说必须指定外部类的类名。并且在外部类的静态和非静态方法中都可以只使用内部类名来指定类型。java内部类类型外部类