javascript多态依赖运行时动态方法查找而非类型声明,核心是方法重写与统一接口调用;继承非必需,鸭子类型亦可实现多态。

JavaScript 中的多态不靠类型声明,而是靠运行时动态查找方法——只要对象有同名方法,调用就走它自己的实现。继承只是组织这种行为的常用方式,核心是“方法重写 + 统一调用接口”。
重写方法:子类定义同名方法覆盖父类逻辑
使用 class + extends 语法时,在子类中用相同名称、相同参数个数(至少兼容)重新定义方法,即完成重写。JavaScript 会自动忽略父类原型上的同名方法,优先使用子类定义的版本。
- 重写不要求显式标注(如
override),只需同名即可 - 可选择用
super.methodName()调用父类原始逻辑,再补充或修改行为 - 不重写的方法仍沿原型链向上查找,保持继承连贯性
多态表现:同一调用,不同响应
当多个子类都重写了父类的某个方法,而外部代码只通过统一接口(比如父类引用或数组遍历)调用时,实际执行哪个版本,取决于对象的**真实构造函数**,而非变量声明类型。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 例如:
const animals = [new Dog(), new Cat()]; animals.forEach(a => a.speak())输出各自声音 - 函数接收父类实例作为参数(如
function handle(animal) { animal.speak() }),传入任意子类实例都能正常工作 - 这种“一个接口、多种实现”的行为就是多态的直接体现
关键前提:保持接口一致性
多态能安全工作的基础,不是语法允许重写,而是子类重写后仍维持了调用方的预期契约:
- 参数数量和含义尽量一致(如都接受
volume,而不是一个要数字、一个要字符串) - 返回值类型应可互换(都返回字符串、都返回 Promise、都返回布尔值等)
- 方法语义不能偏移(
save()应该保存数据,不应改成打印日志)
不依赖 class 也能多态:鸭子类型天然支持
即使不用继承,只要对象有同名方法,就能参与多态调用。比如:
- 一个普通对象
{ speak() { return 'Quack!'; } } - 一个
Duck实例 - 一个第三方库返回的音频播放器对象,也带
speak()
只要它们都实现了 speak(),你就可以把它们放进同一个数组、传给同一个函数,无需关心构造方式——这就是 JavaScript 天然的鸭子类型多态。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










