es6 继承通过 class 关键字和 extends 语法实现,核心机制是子类在构造函数中调用 super() 来执行父类逻辑并获取 this 对象。具体做法是在子类定义中使用 extends 指定父类,并在子类的 constructor 方法中优先调用 super(),随后再初始化子类特有的属性。

如何正确初始化子类实例
子类必须显式调用 super() 才能正确使用 this,否则会在访问属性前抛出引用错误。这是因为 ES6 规定子类的 this 对象必须先由父类的构造函数生成,然后子类才能在其基础上添加自己的属性和方法。

class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + ' makes a noise.');
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // 必须调用 super
this.breed = breed;
}
speak() {
console.log(this.name + ' barks.');
}
}
const dog = new Dog('Rex', 'German Shepherd');
dog.speak(); // Rex barks.
如何扩展父类的方法行为
子类可以通过 super.methodName() 调用父类被覆盖的方法,从而在保留原有功能的基础上增加新的逻辑。这种模式常用于需要增强或修改父类行为而不完全替换它的场景。

class Cat extends Animal {
constructor(name) {
super(name);
}
speak() {
super.speak(); // 调用父类 speak
console.log(this.name + ' meows.');
}
}
const cat = new Cat('Whiskers');
cat.speak();
// Whiskers makes a noise.
// Whiskers meows.
静态方法在继承中如何工作
使用 static 关键字定义的方法属于类本身而非实例,子类可以直接继承这些静态方法并通过 super 调用它们。这允许子类复用父类的工具函数或工厂方法,同时保持代码的模块化。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











