上一篇:多态性之内部类和匿名类
嵌套类:
嵌套类即 static 内部类,必须记住内部类的对象默认持有创建它的那个封装类的一个对象的句柄。然而,假如我们说一个内部类是static 的,这种说法却是不成立的。嵌套类意味着:
嵌套内部类和普通内部类还有一个区别。普通内部类不能含有static数据和static字段,也不能包含嵌套类。但嵌套类可以包含这些东西。
针对第一条“为创建一个 static 内部类的对象而不需要一个外部类对象”,那么可将所有东西都设为static。为了能正常 工作,同时也必须将内部类设为static:
abstract class Con {
abstract public int value();
}
public class Per{
private static class PCon extends Con{ //静态内部类
private int i = 11;
public int value() { return i; }
}
public static Con cont() { //静态方法
return new PCon();
}
public static void main(String[] args) {
Con c = cont(); //不需要创建封装类
}
}
static内部类可以成为接口的一部分----因为类是“静态”的,所以它不会违反接口的规则(static 内部类只位于接口的命名空间内部):
interface IInterface {
static class Inner {
int i, j, k;
void f() {}
}
}
生成内部类对象:
普通内部类--除非已拥有外部类的一个对象,否则不可能创建内部类的一个对象:
public class Par {
class Contents { //内部类
private int i = 11;
public int value() { return i; }
}
public static void main(String[] args) {
Par p = new Par(); //需要外部类
Par.Contents c = p.new Contents(); //创建内部类
}
}
static内部类--不需要指向外部类对象的一个句柄:
public class Par {
static class Contents { //静态内部类
private int i = 11;
public int value() { return i; }
}
public static void main(String[] args) {
//不需要封装类(外部类)
Contents c = new Contents(); //创建内部类
}
}