2008-05-15
内部类
内部类 指在另一个类内部的类,它可以继承外部类或实现接口。除非是在宿主类的非static方法里,不然创建内部类的对象必须使用 OuterClassName.InnerClassName的形式。
内部类可以声明为 private 和 protected, 外部类则不可以, 它们只可能是 public 和 package。
内部类还可以用于方法和作用域中。这种叫本地内部类 local inner classes,它们不能有访问控制符,因为它不属于宿主类,但它可以访问当前代码段的 finnal 变量以及宿主的所有变量。
匿名内部类 更改上面如下: 可以看到 可以定义时初始化成员变量,但要是final类型。
static 的内部类称为 嵌套类, 普通的内部类都包含着其宿主类的对象。
它的特点是:1 无需宿主类的对象就能创建嵌套类的对象
2 不能在嵌套类类里访问非static的宿主类对象。
普通的内部类里不能有static的成员。
为甚么使用内部类?
每个内部类都可以独立实现某个实现, 因此内部类不会受“宿主类是否已经继承了别的实现”的束缚。它彻底的解决了多重继承问题。
......
public static void main(String[] args) {
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.createInnerClass();
}
......
内部类可以声明为 private 和 protected, 外部类则不可以, 它们只可能是 public 和 package。
class Test3 {
private class C3 implements Contents {
private int i;
public int value() {return i;}
}
protected class D3 implements Desc {
private int i;
public int value() {return i;}
}
public Desc newDesc() {
return new D3();
}
public Contents newContents() {
return new C3();
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Test3 test3 = new Test3();
Contents c = test3.newContents();
}
}
内部类还可以用于方法和作用域中。这种叫本地内部类 local inner classes,它们不能有访问控制符,因为它不属于宿主类,但它可以访问当前代码段的 finnal 变量以及宿主的所有变量。
......
void test() {
class Test2 {
......
}
Test2 t2 = new Test2();
......
}
......
匿名内部类 更改上面如下: 可以看到 可以定义时初始化成员变量,但要是final类型。
......
public Contents newContents(final int j) {
return new Contents() {
int i = j;
public int value() {return i;};
};
}
static 的内部类称为 嵌套类, 普通的内部类都包含着其宿主类的对象。
它的特点是:1 无需宿主类的对象就能创建嵌套类的对象
2 不能在嵌套类类里访问非static的宿主类对象。
普通的内部类里不能有static的成员。
为甚么使用内部类?
每个内部类都可以独立实现某个实现, 因此内部类不会受“宿主类是否已经继承了别的实现”的束缚。它彻底的解决了多重继承问题。







评论排行榜