当前位置: 首页 > news >正文

TypeScript面向对象 02

抽象类

abstract开头的类是抽象类。抽象类和其他类区别不大,只是不能用来创建对象。抽象类就是专门用来被继承的类

抽象类中可以添加抽象方法。定义一个抽象方法使用abstract,没有方法体。抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写

// 抽象类
abstract class Person {name:string;age:number;constructor(name:string, age:number) {this.name = name;this.age = age;}// 抽象方法,注意用 void abstract say():void;
}
class Student extends Person {uid:string;constructor(name:string, age:number, uid:string) {super(name, age);this.uid = uid;}info() {console.log("学生:" + this.name);}// 子类必须重写父类中的抽象方法say() {// super.say();console.log("this is Child_Class");}
}
const stu = new Student('glm', 14, "2345");
stu.say();

接口

接口用来定义一个类结构。接口可以在定义类类的时候去限制类的结构。

  • 接口中的所有属性都不能有实际的值
  • 接口只定义对象的结构,而不考虑实际值
  • 在接口中的所有方法都是抽象方法
interface myInter {name:string;say():void;
}
/*** 定义类时,可以使类去实现一个接口*      实现接口就是使类满足接口的要求*/
class MyClass implements myInter {name:string;constructor(name:string) {this.name = name;}say() {console.log("hello");}
}

属性封装

TS可以在属性前添加属性修饰符。

  • public:修饰的属性可以在任意位置访问(修改)默认值
  • private:只能在类内部进行访问(修改)
    • 通过在类中添加方法使得私有属性可以被外部访问
  • protected:受保护的属性,只能在当前类和当前类的子类中被访问(修改)

TS封装有两种,一种是编程语言中常见的getter/setter;另一种是TS特有的。

getter/setter

  • getter:读取属性
  • setter:设置属性
class Student {private _name:string;private _age:number;constructor(name:string, age:number) {this._name = name;this._age = age;}getName() {return this._name;}setName(name:string) {this._name = name;}getAge() {return this._age;}setAge(age:number) {this._age = age;}
}
const a = new Student('golemon', 321);
console.log(a.getName(), a.getAge())
a.setName('haper');
console.log(a.getName());

在这里插入图片描述

TS特有的封装方式

设置getter方法的方式:

get attri_name() {// ...
}

设置setter方法的方式:

set attri_name(val) {// ...
}

访问是直接通过attri_name访问,无需括号()

class Student {private _name:string;private _age:number;constructor(name:string, age:number) {this._name = name;this._age = age;}get name() {return this._name;}set name(name:string) {this._name = name;}get age() {return this._age;}set age(age:number) {this._age = age;}
}
const a = new Student('golemon', 321);
console.log(a.name, a.age)
a.name = 'yh'
console.log(a.name);

在这里插入图片描述

同时,可以不用在类中声明变量,可直接在构造函数中声明。

class Class {constructor(public name:string, public age:number) {// ....}
}

http://www.mrgr.cn/news/43280.html

相关文章:

  • 特别节目————集训总结
  • AQS原理(AbstractQueuedSynchronizer)
  • 若依使用(二次开发)
  • 152. 乘积最大子数组
  • 国外电商系统开发-运维系统添加拓扑节点
  • 知识图谱入门——10:使用 spaCy 进行命名实体识别(NER)的进阶应用:基于词袋的实体识别与知识抽取
  • (Linux驱动学习 - 6).Linux中断
  • 【ECMAScript 从入门到进阶教程】第二部分:中级概念(面向对象编程,异步编程,模块化,try/catch 语句)
  • visual studio使用ssh连接linux虚拟机运行程序
  • 【OAuth 2.0】使用与更新
  • 引领5G驱动的全球数字营销革新:章鱼移动广告全球平台的崛起
  • MVCC(多版本并发控制)
  • 易盾新版滑块分析
  • 第十三届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)(第一场)
  • 文件路径、文件系统操作、字节流字符流、文件内容操作、自己实现文件查找 删除 复制、IO报错:拒绝访问
  • 七、Drf版本组件
  • 举例说明 .Net Core 单元测试中 xUnit 的 [Theory] 属性的用法
  • [C++]使用纯opencv部署yolov11-seg实例分割onnx模型
  • 大数据实时数仓Hologres(四):基于Flink+Hologres搭建实时数仓
  • 组合数求法汇总