java匿名内部类实现多态的核心是new接口名(){…}创建实例并赋值给接口引用,满足父类型引用指向子类型对象的多态前提;可定义多个行为不同的匿名实现,通过统一接口调用,运行时动态绑定具体方法。

Java中匿名内部类通过实现接口创建多态实例,核心在于:用 new 接口名() { ... } 语法直接创建接口的实现对象,并将其赋值给接口类型引用——这天然满足多态条件(父类型引用指向子类型对象)。
接口定义与匿名实现
先定义一个接口,比如:
interface OnClickListener {void onClick(String message);
}
然后用匿名内部类实现它:
OnClickListener listener = new OnClickListener() {@Override
public void onClick(String message) {
System.out.println("Clicked: " + message);
}
};
这里 listener 是 OnClickListener 类型,但实际指向的是一个匿名类的实例,这就是多态的体现。
多态调用的关键:统一接口,不同实现
多个匿名内部类可以实现同一接口,但行为不同。例如:
OnClickListener successListener = new OnClickListener() { public void onClick(String m) { System.out.println("✅ Success: " + m); } };OnClickListener errorListener = new OnClickListener() { public void onClick(String m) { System.out.println("❌ Error: " + m); } };
它们都可传给同一方法:
listener.onClick(msg); // 运行时决定调用哪个实现
}
调用 handleEvent(successListener, "login") 或 handleEvent(errorListener, "timeout"),行为由实际对象决定。
结合方法参数或返回值使用更自然
匿名内部类常用于回调场景,比如 Swing 或 Android 中:
button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
System.out.println("Button clicked!");
}
});
这里的 ActionListener 是接口,addActionListener 参数类型就是该接口,传入匿名实现后,JVM 在事件触发时动态调用其方法——这就是典型的运行时多态。
注意点:不能有构造器,但可访问外部局部变量(需为 final 或 effectively final)
匿名内部类隐式继承自 Object、实现指定接口,因此:
- 没有类名,不能定义构造器,但可在大括号内写初始化代码(如字段赋值、方法调用)
- 可直接访问所在方法的 final 变量(Java 8+ 支持 effectively final,即未被重新赋值)
- 不能用
this指代外部类实例(要用OuterClass.this),但接口实现中一般不需要
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











