Menu
CoddyTech

“is-a”关系

本课属于 Coddy JavaScript 学习旅程的“面向对象编程”单元。第 25 课,共 56 课。

“is-a”关系是一种简单的判断方法,可以用来确定继承是否合理。如果你可以说“X 是一种 Y”,而且听起来正确,那么 X 可能应该继承自 Y。

正确(使用继承):

  • “狗是一种动物” → class Dog extends Animal
  • “汽车是一种车辆” → class Car extends Vehicle
  • “一本教科书是一种书” → class Textbook extends Book

不正确(不要使用继承):

  • “Driver 是 Car” → 不对,驾驶员使用汽车
  • “车轮是汽车” → 不对,车轮是汽车的一部分
  • “学生是教室” → 不,学生是在教室里

例如,我们来看看两个对象:

// 基类:它们本质上都是什么
class Book {
  constructor(title, author, pages) {
    this.title = title;
    this.author = author;
    this.pages = pages;
  }
  
  read() {
    console.log(`Reading ${this.title} by ${this.author}`);
  }
}
// Novel 是一种 Book(正确的继承关系)
class Novel extends Book {
  constructor(title, author, pages, genre) {
    super(title, author, pages);
    this.genre = genre;
  }
}
// 使用这些类
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read();    // "Reading 1984 by George Orwell",继承自 Book
challenge icon

挑战

给定一个 ElectronicDevice 类和一个 Smartphone 类。Smartphone 是一种具有额外功能的 ElectronicDevice。你的任务是创建一个 `myPhone` 对象,品牌为 "Samsung",型号为 “Galaxy S23”。

亲手试试

import { ElectronicDevice } from './electronicDevice.js';
import { Smartphone } from './smartphone.js';


// TODO:创建一个品牌为 "Samsung"、型号为 “Galaxy S23” 的 `myPhone` 对象。


// 测试代码,请勿修改
console.log(myPhone.turnOn());  // 应输出 "Samsung Galaxy S23 is now ON"
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: JavaScript 在线编译器