1、内部类
????????在Java程序中,通常情况下,会把不同的类组织在不同的包下面,对于一个包下面的类来说,它们是在同一层次,没有父子关系。
????????还有一种类,它被定义在另一个类的内部,所以称为内部类(Nested Class)。
????????Java的内部类分为好几种,通常情况用得不多,但也需要了解它们是如何使用的。
(1)内部类(Inner Class)
????????如果一个类定义在另一个类的内部,这个类就是Inner class。
class Outer {
class inner {
// 定义了一个Inner Class
}
}
// 实例化一个Outer
Outer outer = new Outer();
// 实例化一个Inner
Outer.Inner inner = outer.new Inner();
????????Outer是一个普通类,而Inner是一个Inner Class,它与普通类有个最大的不同,就是Inner Class的实例不能单独存在,必须依附于一个Outer Class的实例。
(2)匿名类(Anonymous Class)
????????它不需要在Outer Class中明确地定义这个Class,而是在方法内部,通过匿名类来定义。
class Outer {
private String name;
Outer(String name){
this.name = name;
}
void asyncHello() {
// 定义Runnable接口的匿名类
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("hello, " + Outer.this.name);
}
};
}
}
????????定义匿名类写法:
Runnable r = new Runnable() {
//实现必要的抽象方法
};
(3)静态内部类(Static Nested Class)
????????使用static修饰Inner Class类,称为静态内部类(Static Nested Class).
class Outer {
static class StaticNested { // 静态内部类
void hello() {
System.out.println("Hello");
}
}
}
2、总结
????????Java的内部类可分为Inner class、Anonymous Class和Static Nested Class三种:
????????????????Inner Class和Anonymous Class本质上是相同的,都必须依附于Outer Class的实例,即隐含地持有outer.this实例,并拥有Outer Class的private访问权限。
????????????????Static Nested Class是独立类,但拥有Outer Class的private访问权限。
|