在JavaScript中重写Getter/Setter是否属于多态?
JavaScript中Getter重写与多态的关系
示例代码
Person类
class Person{ constructor(name){ this._name = name; } get name(){ return this._name; } }
Worker类
class Worker extends Person{ constructor(name, job){ super(name); this._job=job; } get job(){ return this._job; } get name(){ return "Worker: " + this._name; } }
问题
在JavaScript中,重写类的Getter或Setter是否属于多态?Worker类重写name Getter的情况是否属于多态?
回答
首先明确:重写类的Getter/Setter属于多态的一种表现形式,Worker类重写name Getter的情况完全符合多态的定义。
多态的核心是:同一个属性或方法,在不同类型的实例上会表现出不同的行为。在JavaScript的继承体系里,Getter和Setter本质是特殊的访问器方法,子类重写父类的Getter后,同一个属性名(比如name)在父类实例和子类实例上的访问结果完全不同——Person实例的name返回原始名称,Worker实例的name返回带前缀的名称,这种“同一操作、不同行为”的特性,正是多态的典型体现。
不管是重写普通方法还是重写Getter/Setter,只要是基于继承实现的行为差异化,都属于多态的范畴。
内容的提问来源于stack exchange,提问作者Grimalkin
相关产品推荐
相关产品推荐

