内部类
299字约1分钟
2024-08-10
如果一个类定义在另一个类的内部,这个类就是内部类
class Outer {
class Inner {
// 定义了一个Inner Class
}
}
Inner
是一个内部类,它与普通类有个最大的不同,就是 Inner Class
的实例不能单独存在,必须依附于一个 Outer Class
的实例
public static void main(String[] args) {
// 实例化一个Outer
Outer outer = new Outer("Nested");
// 实例化一个Inner
Outer.Inner inner = outer.new Inner();
}
匿名内部类
Runnable
本身是接口,接口是不能实例化的,所以这里实际上是定义了一个实现了 Runnable
接口的匿名类,并且通过 new
实例化该匿名类,然后转型为 Runnable
。在定义匿名类的时候就必须实例化它
class Outer {
void asyncHello() {
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Hello");
}
};
new Thread(r).start();
}
}
静态内部类
用 static
修饰的内部类和普通内部类有很大的不同,它不再依附于 Outer
的实例,而是一个完全独立的类,因此无法引用 Outer.this
,但它可以访问 Outer
的 private
静态字段和静态方法
class Outer {
static class StaticNested {
void hello() {
System.out.println("Hello");
}
}
}