vue3第三十七节(TS 之 class 类实现及使用)

引言 :面相对象编程在我们工作中必须同时也是不可或缺的一部分,想要对JavaScript | TypeScript 有更加深刻的理解应用,我们需要充分学习应用

1、类的基本用途

在TS中 类描述了所创建的对象共同的属性和方法。TypeScript 支持面向对象的所有特性,比如 类、接口等。 具体包含以下方面字段 − 字段是类里面声明的变量。字段表示对象的有关数据。 构造函数 − 类实例化时调用,可以为类的对象分配内存。 方法 − 方法为对象要执行的操作

typescript 复制代码
class Person {
    // 变量
    name: string;
    age: number;
    // 静态变量
    static other: string = '静态变量';
    // 构造函数
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
    // 方法
    // 静态变量只能在静态方法中使用
    static say(word: string): void {
        console.log(this.other + '说话' + word)
    }
    play(things: string): void {
        console.log(this.name + ' ' + things)
    }
} 

2、类的继承

类的继承是通过 extend 来实现的 子类除了不能继承父类的私有成员(方法和属性)和构造函数,其他的都可以继承 。 其中:父类称为:超类|基类 子类成为:派生类

注意TypeScript 一次只能继承一个类,不支持继承多个类,但 TypeScript 支持多重继承泪如(B 继承 A,C 继承 B)。

scala 复制代码
class Person1 extends Person {
    like: string;
    constructor(name: string, age: number, like: string) {
        // 调用父类的构造函数
        super(name, age); 
        this.like = like;
    }
    // 子类中有父类同名的方法时,则会重写父类中的方法
    play(things: string):void {
        console.log('play', things);
    }
}

3、多重继承

Person1 继承了 Person, 而 Student 又继承了 Person1 // 子类 继承 父类2

scala 复制代码
class Student extends Person1 {
    public grade: string;
  
    constructor(name: string, age: number, grade: string) {
      super(name, age, grade); // super 引用父类的构造函数
      this.grade = grade;
    }
  
    // 方法重写:子类方法名和父类相同,将重写父类方法
    play(ball: string): void {
      console.log(this.name + "在玩" + ball);
    }
  }

4、static 关键字

static 关键字用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用。

如父类 Person 中定义的 other属性,say方法 都是静态成员

其他关键字还有public(默认):公有,可以在任何地方被访问 protected: 受保护,可以被其自身以及其子类访问 private: 私有,只能被其定义所在的类访问。 readonly: 可以使用 readonly关键字将属性设置为只读的。 只读属性必须在声明时或构造函数里被初始化

typescript 复制代码
class StudentA {
    public name: string;
    protected age: number;
    private love: string;
  
    constructor(name: string, age: number, love: string) {
      this.name = name;
      this.age = age;
      this.love = love;
    }
    say(): void {
      console.log("hello world");
    }
  }
  

5、类实现 通过 implements 实现接口

可以使用一个 implements 子句来检查一个类,是否满足了一个特定的接口

注意: 实现一个带有可选属性的接口并不能创建该属性,只要一个接口继承了某个类, 那么就会继承这个类中所有的属性和方法,但是只会继承属性和方法的声明, 不会继承属 性和方法实现

php 复制代码
**与`extends`的区别​**    

extends: 继承某个类,继承之后可以使用父类的方法,也可以重写父类的方法
implements:实现某个接口,必须重写才可以使用


// 定义接口规范
php 复制代码
interface PersonE {
    name: string;
    age?: number; // 在接口的成员变量后加 ? 代表此成员变量可不用被类实现
    eat(food: string): void; // 在接口中可不写方法体
  }

// 定义类实现接口()

typescript 复制代码
 class StudentE implements PersonE {
    name: string;
    constructor(name: string) {
      this.name = name;
    }
    // 在类中必写方法体
    eat(food: string): void {
      console.log(this.name + "吃" + food);
    }
  }

应用

csharp 复制代码
  let alias = new StudentE("alias");
  console.log(alias);
  alias.eat("玉米糁");

7、抽象类 关键字:abstract

less 复制代码
A/抽象类不可以被实例化,只能被继承
B/抽象类中定义的抽象方法必须被继承它的子类重写
C/抽象类中的方法和变量可以是抽象的(被 `abstract` 修饰)也可以是不抽象的,但接口的方法和变量都是抽象的(都要被重写)
D/在抽象类中的抽象方法不写方法体
E/一个类只能继承一个抽象类

//  定义抽象类
typescript 复制代码
abstract class PersonF {
  name: string;
  age?: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
  // 非抽象方法
eat(food: string): void {
    console.log(this.name + "吃" + food);
  }
  // 抽象方法,无方法体
  abstract play(ball: string): void;
}

// 定义子类继承抽象类

scala 复制代码
class StudentF extends PersonF {
  sex: string;
  constructor(name: string, age: number, sex: string) {
    super(name, age);
    this.name = name;
    this.sex = sex;
  }
  // 在子类中必须重写抽象类的抽象方法
  play(ball: string): void {
    console.log(this.name + "玩" + ball);
  }
}
csharp 复制代码
let alias = new Student("alias", 18, "汉子");
console.log(alias);
alias.eat("香蕉");
alias.play("象棋");
相关推荐
萌萌哒草头将军2 小时前
⚡⚡⚡尤雨溪宣布开发 Vite Devtools,这两个很哇塞 🚀 Vite 的插件,你一定要知道!
前端·vue.js·vite
小彭努力中2 小时前
7.Three.js 中 CubeCamera详解与实战示例
开发语言·前端·javascript·vue.js·ecmascript
浪裡遊3 小时前
跨域问题(Cross-Origin Problem)
linux·前端·vue.js·后端·https·sprint
滿3 小时前
Vue3 Element Plus el-tabs数据刷新方法
javascript·vue.js·elementui
LinDaiuuj3 小时前
判断符号??,?. ,! ,!! ,|| ,&&,?: 意思以及举例
开发语言·前端·javascript
敲厉害的燕宝3 小时前
Pinia——Vue的Store状态管理库
前端·javascript·vue.js
Aphasia3114 小时前
react必备JavaScript知识点(二)——类
前端·javascript
玖玖passion4 小时前
数组转树:数据结构中的经典问题
前端
呼Lu噜4 小时前
WPF-遵循MVVM框架创建图表的显示【保姆级】
前端·后端·wpf
珠峰下的沙砾4 小时前
Vue3 里 CSS 深度作用选择器 :global
前端·javascript·css