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("象棋");
相关推荐
英俊潇洒美少年17 小时前
Vue2/Vue3 vue-i18n完整改造流程(异步懒加载+后端接口请求)
前端·javascript·vue.js
空中海1 天前
第七章:vue工程化与构建工具
前端·javascript·vue.js
zhensherlock1 天前
Protocol Launcher 系列:Trello 看板管理的协议自动化
前端·javascript·typescript·node.js·自动化·github·js
zhuà!1 天前
element的el-form提交校验没反应问题
前端·elementui
龙猫里的小梅啊1 天前
CSS(一)CSS基础语法与样式引入
前端·css
小码哥_常1 天前
从0到1,开启Android音视频开发之旅
前端
渔舟小调1 天前
P19 | 前端加密通信层 pikachuNetwork.js 完整实现
开发语言·前端·javascript
qq_12084093711 天前
Three.js 工程向:Draw Call 预算治理与渲染批处理实践
前端·javascript
旷世奇才李先生1 天前
Vue3\+Vite\+Pinia实战:企业级后台管理系统完整实现(附源码)
vue.js
不会聊天真君6471 天前
JavaScript基础语法(Web前端开发笔记第三期)
前端·javascript·笔记