JAVA中可以在一个类中声明另一个类,这个类可以是动态的,也可以是静态的,昨天在论坛中看见了这样一段代码:
interface
Destination
... {
String readLabel();
}
class Parcel10 ... {
public class p
...{
}
public static class PDestination
implements Destination
...{
private static String label;
public PDestination(String whereTo) ...{
label = whereTo;
}
public String readLabel() ...{ return label; }
}
}
class TTTT
... {
public void t()
...{
Parcel10 c2=new Parcel10();
Parcel10.p p1=c2.new p();
Parcel10.PDestination pd= new Parcel10.PDestination("aaaaa");
}
}
... {
String readLabel();
}
class Parcel10 ... {
public class p
...{
}
public static class PDestination
implements Destination
...{
private static String label;
public PDestination(String whereTo) ...{
label = whereTo;
}
public String readLabel() ...{ return label; }
}
}
class TTTT
... {
public void t()
...{
Parcel10 c2=new Parcel10();
Parcel10.p p1=c2.new p();
Parcel10.PDestination pd= new Parcel10.PDestination("aaaaa");
}
}
借口和类Parcel10的声明就不用解释了,相信大家都能看明白,重点在于类TTTT,他首先创建了一个Parcel10的对象c2,然后又调用了Parcel10.p创建了一个内部类对象p1.这里面有一个内部类对象定义的格式:主类名.内部类名. 内部类对象名=主类对象.new 内部类构造器(参数);
下一句要声明一个静态内部类的对象,它和上面的有所不同,首先看一下它的格式:
主类名.静态内部类名. 静态内部类对象名=new 主类名.内部类构造器(参数);
我们先来看一下它们的区别.首先声明部分是相同的,内部类的声明的固定格式,重点在后面,普通内部类p它可以看作是一个Parcel10的一个成员,所以声明p的对象的关键字new应该由主类的对象去调用,c2.new.而静态内部类它是属于住类的,对象无法调用它,后面的构造器也是由类名调用,如果你明白静态成员和方法的使用,相信不难理解.
但是作者对于new的用法始终不太理解,API使用的不熟练,以至于一直没找到,希望各位前辈和高手指点.