匿名內部類是 Java 的語法糖,簡化「一次性實現接口/繼承類」的代碼。本文通過五大經典模式演示用法,並揭示編譯後的字節碼真相。
public interface IWriter { void write(); }
public static void main(String[] args) {
IWriter writer = new IWriter() {
@Override public void write() {
System.out.println("IWriter write...");
}
};
writer.write();
}
public abstract class AbstractWriter {
public abstract void write();
}
public static void main(String[] args) {
AbstractWriter aw = new AbstractWriter() {
@Override public void write() {
System.out.println("AbstractWriter write...");
}
};
aw.write();
}
public class TextWriter implements IWriter {
@Override public void write() { System.out.print("text writer.."); }
}
public static void main(String[] args) {
TextWriter tw = new TextWriter() {
@Override public void write() {
System.out.println("TextWriter 2 write...");
}
};
tw.write();
}
public static void main(String[] args) {
Thread t = new Thread() {
@Override public void run() {
new IWriter() {
@Override public void write() {
System.out.println("IWriter thread write...");
}
}.write();
}
};
t.start(); // 注意:應調用 start() 而非 run()
}
編譯器會為每個匿名內部類生成獨立 .class 文件,命名規則:外部類$序號.class(如 Main$1.class、Main$2.class)。

本質上等同於手寫獨立實現類,但語法糖帶來:
{ } 中