在现代JavaScript开发中,面向对象编程是一种非常重要的思想。ES6引入了class
关键字来定义类,使得JavaScript的面向对象编程变得更加直观和强大。类的继承是面向对象编程中的一个重要概念,它允许我们创建一个基类,并基于这个基类创建派生类。通过使用extends
关键字,我们可以实现类的继承。
创建基类
首先,我们需要定义一个基类作为所有派生类的基础。在这个例子中,我们将创建一个名为Person
的基类。
-- -------------------- ---- ------- ----- ------ - ----------------- ---- - --------- - ----- -------- - ---- - ---------- - ------------------- -- ---- -- ------------ --- - -- ----------- ----- ------- - -
这里,我们定义了一个构造函数constructor
用于初始化对象的属性。同时,我们也定义了一个方法sayHello()
,该方法用于输出一条欢迎消息。
使用 extends
关键字创建派生类
一旦我们有了一个基类,就可以使用extends
关键字创建一个派生类。派生类可以继承基类的所有属性和方法,并且还可以添加自己的属性和方法。
定义派生类
接下来,我们创建一个派生类Student
,它继承自Person
类。
-- -------------------- ---- ------- ----- ------- ------- ------ - ----------------- ---- ------ - ----------- ----- -- --------- ---------- - ------ - ------- - ------------------------- -- -------- -- ----- ----------------- - -
在上面的例子中,我们通过super(name, age)
调用了基类Person
的构造函数,从而初始化了name
和age
这两个属性。然后,我们在Student
类中添加了一个新的属性grade
以及一个新的方法study()
。
实例化派生类并调用方法
现在,我们可以创建一个Student
类的实例,并调用其方法:
const student = new Student('Tom', 15, '10th'); student.sayHello(); // 输出: Hello, my name is Tom and I am 15 years old. student.study(); // 输出: Tom is studying in grade 10th.
从上面的代码可以看出,派生类不仅可以访问到基类的方法,还可以拥有自己的方法和属性。
覆盖基类方法
有时候,我们可能需要覆盖基类的方法,以便根据派生类的具体情况进行调整或扩展。这可以通过简单地在派生类中重新定义同名方法来实现。
覆盖基类方法
假设我们希望在Student
类中对sayHello
方法进行一些修改,使其更加个性化。
-- -------------------- ---- ------- ----- ------- ------- ------ - ----------------- ---- ------ - ----------- ----- ---------- - ------ - ---------- - ---------------- --- - ------- ----- ------------- ----------- ----- ---- -------- -- ----- ----------------- - ------- - ------------------------- -- -------- -- ----- ----------------- - -
在这个版本的Student
类中,我们重写了sayHello
方法,让它包含了学生的年级信息,这样可以使输出的信息更加具体和详细。
测试覆盖后的效果
const student = new Student('Jerry', 16, '11th'); student.sayHello(); // 输出: Hi, I'm a student named Jerry, 16 years old, studying in grade 11th.
通过以上步骤,我们展示了如何在JavaScript中使用extends
关键字实现类的继承,以及如何通过覆盖基类方法来满足特定需求。这对于构建复杂的应用程序和库来说是非常有用的工具。