内部类这个知识点面试或笔试中常考,看一下下面这个例子,就能记住知识点了:
public class DotNew {
//定义一个非静态的内部类
public class Inner {}
public static void main(String[] args) {
DotNew dn = new DotNew();
//在没有创建外部类的对象时,是不能创建内部类的
//因为内部类对象会暗暗的连接到创建它的外部类对象上
//如果Inner是static 则下面这种初妱化方法是错的
DotNew.Inner dni = dn.new Inner();
//下面这种方法是错的,因为非静态内部类必须链接到一个外部类对象上
//不过,如果 Inner 是 static 的,下面这种初始化方法是对的
//DotNew.Inner dni2 = new Inner();
}
}
/*
* 下面是一个使用非静态内部类的示例
*/
//一个包括肯定包括东西,且有一个目的地
//这里的Contents和Destination是供Parcel自己内部使用,其它类不需要实例化它们
//其它类只能通过 Parcel 对象来获得Contents和Destination的实例
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 Contents getContents() {
return new Contents();
}
public Destination getDestination(String s) {
return new Destination(s);
}
//邮包裹时应该指明内容及目的地
public void ship(String dest) {
Contents c = new Contents();
Destination d = new Destination(dest);
System.out.println(d.readLabel());
}
}