理解继承可以从一个更简单的角度来解释。继承允许我们创建新的类或对象,这些类或对象可以继承另一个类或对象的属性和方法,而不用重复定义这些属性和方法。
举一个简单的现实生活的例子:
假设我们有一个 Animal
类,表示所有的动物。每种动物都有一些共有的特性,比如 name
和 age
,并且它们可以做一些事情,比如 eat
。现在,我们想创建一个 Dog
类,狗也是一种动物,所以我们不需要重新定义这些共同的属性和方法,而是通过继承来复用。
代码示例
父类:Animal
类
// 定义一个Animal类(父类)
class Animal {
constructor(name, age) {
this.name = name; // 动物的名字
this.age = age; // 动物的年龄
}
eat() {
console.log(this.name + ' is eating.');
}
}
在这里,Animal
类有两个属性 name
和 age
,还有一个方法 eat()
,所有的动物都有这些属性和方法。
子类:Dog
类继承 Animal
// 定义一个Dog类(子类),继承Animal类
class Dog extends Animal {
constructor(name, age, breed) {
super(name, age); // 调用父类的构造函数,传入name和age
this.breed = breed; // 狗特有的属性:品种
}
bark() {
console.log(this.name + ' is barking.');
}
}
class Dog extends Animal
:Dog
类继承了Animal
类,这意味着Dog
类会自动拥有Animal
类的所有属性和方法。super(name, age)
:在子类的构造函数中,使用super()
来调用父类的构造函数,初始化父类的name
和age
属性。- 子类
Dog
有一个额外的属性breed
(狗的品种),以及一个方法bark()
(狗叫)。
使用子类和父类
const dog = new Dog('Buddy', 3, 'Golden Retriever');
console.log(dog.name); // 输出 'Buddy'
console.log(dog.age); // 输出 3
console.log(dog.breed); // 输出 'Golden Retriever'
dog.eat(); // 调用父类的eat方法,输出 'Buddy is eating.'
dog.bark(); // 调用子类的bark方法,输出 'Buddy is barking.'
理解继承可以从一个更简单的角度来解释。继承允许我们创建新的类或对象,这些类或对象可以继承另一个类或对象的属性和方法,而不用重复定义这些属性和方法。
举一个简单的现实生活的例子:
假设我们有一个 Animal
类,表示所有的动物。每种动物都有一些共有的特性,比如 name
和 age
,并且它们可以做一些事情,比如 eat
。现在,我们想创建一个 Dog
类,狗也是一种动物,所以我们不需要重新定义这些共同的属性和方法,而是通过继承来复用。
代码示例
父类:Animal
类
js
复制代码
// 定义一个Animal类(父类) class Animal { constructor(name, age) { this.name = name; // 动物的名字 this.age = age; // 动物的年龄 } eat() { console.log(this.name + ' is eating.'); } }
在这里,Animal
类有两个属性 name
和 age
,还有一个方法 eat()
,所有的动物都有这些属性和方法。
子类:Dog
类继承 Animal
js
复制代码
// 定义一个Dog类(子类),继承Animal类 class Dog extends Animal { constructor(name, age, breed) { super(name, age); // 调用父类的构造函数,传入name和age this.breed = breed; // 狗特有的属性:品种 } bark() { console.log(this.name + ' is barking.'); } }
class Dog extends Animal
:Dog
类继承了Animal
类,这意味着Dog
类会自动拥有Animal
类的所有属性和方法。super(name, age)
:在子类的构造函数中,使用super()
来调用父类的构造函数,初始化父类的name
和age
属性。- 子类
Dog
有一个额外的属性breed
(狗的品种),以及一个方法bark()
(狗叫)。
使用子类和父类
js
复制代码
const dog = new Dog('Buddy', 3, 'Golden Retriever'); console.log(dog.name); // 输出 'Buddy' console.log(dog.age); // 输出 3 console.log(dog.breed); // 输出 'Golden Retriever' dog.eat(); // 调用父类的eat方法,输出 'Buddy is eating.' dog.bark(); // 调用子类的bark方法,输出 'Buddy is barking.'
继承的作用:
- 代码复用:
Dog
类不需要重新定义name
、age
和eat()
,因为它继承了Animal
类的这些属性和方法。 - 扩展父类功能:
Dog
类可以在继承的基础上,定义自己的特有方法bark()
和属性breed
,扩展了父类的功能。
总结:
- 继承让我们可以创建子类,并从父类继承属性和方法,从而避免重复代码。
- 子类可以调用父类的构造函数(
super()
),来初始化父类的属性。 - 子类也可以定义自己的方法和属性,增加新的功能。
通过这个例子,Dog
类继承了 Animal
类的属性和方法,而同时又增加了狗的特有行为,这就是继承的基本原理。