内部类
约 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");
}
}
}