面试题---面向对象的三大特征

封装:

  • 将可复用的代码用一个结构包装起来, 后面可以反复使用
  • js的哪些语法体现了封装性: 函数 ==> 对象 ==> 模块 ==> 组件 ==> 库
  • 封装都要有个特点: 不需要外部看到的必须隐藏起来, 只向外部暴露想让外部使用的功能或数据

继承:

为什么要有继承?

复用代码, 从而减少编码

js中的继承都是基于原型的继承: ES6的类本质也是 编码实现: 原型链+借用构造函数的组合 / ES6的类继承

通俗来说:继承是子类自动共享父类数据和方法的机制。子类可以继承父类的属性和行为,并可以增加新的属性或重写父类的方法。通过继承,可以构建一个类层次结构,其中子类继承父类的特征,并可以在此基础上进行扩展和定制。继承增强了代码的复用性,减少了冗余,并在一定程度上支持“is-a”类型的关系

多态: 多种形态

理解

  1. 声明时指定一个类型对象, 并调用其方法,
  2. 实际使用时可以指定任意子类型对象, 运行的方法就是当前子类型对象的方法

JS中有多态:

由于JS是弱类型语言, 在声明时都不用指定类型

在使用时可以指定任意类型的数据 ==> 这已经就是多态的体现了

它们共同支持复杂系统的设计和开发,提高软件的组织性、可读性和可维护性。

以下是 JavaScript 中面向对象的三大特征的示例:

1.封装

class Animal {
  constructor(name) {
    // 封装属性
    this._name = name; // 使用下划线表示私有属性
  }

  // 提供 getter 和 setter 方法来操作私有属性
  get name() {
    return this._name;
  }

  set name(newName) {
    this._name = newName;
  }

  // 其他方法...
}

 1.继承

class Dog extends Animal {
  constructor(name, breed) {
    super(name); // 调用父类构造函数
    this.breed = breed;
  }

  bark() {
    console.log(`${this.name} says Woof!`);
  }

  // 可以重写父类方法,实现多态
  speak() {
    console.log("I'm a dog and I can bark.");
    super.speak(); // 调用父类的 speak 方法
  }
}

// 父类 Animal 的 speak 方法
Animal.prototype.speak = function () {
  console.log("I am an animal.");
};

3.多态:

let myDog = new Dog('Rex', 'Labrador');

myDog.name = 'Buddy'; // 使用 setter 修改封装的属性
console.log(myDog.name); // 使用 getter 获取封装的属性

myDog.bark(); // Dog 类独有的方法
myDog.speak(); // 显示多态,虽然都是 speak 方法,但是 Dog 类有自己的实现

let myCat = new Animal('Kitty');
myCat.speak(); // Animal 类的 speak 方法

// 上述代码中,speak 方法的调用展示了基于对象类型的多态性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值