文章目录
- 类
-
- 复习相关知识
- 属性修饰符
-
- [public 修饰符](#public 修饰符)
- 属性的简写形式
- protected修饰符
- 抽象类
- 接口(interface)
-
- 定义类结构
- 定义对象结构
- 定义函数结构
- 接口之间的继承
- [接口自动合并 (可重复定义)](#接口自动合并 (可重复定义))
- 一些相似的概念的区别
- 泛型
类
复习相关知识
属性修饰符
public 修饰符
属性的简写形式
完整写法
typescript
class Person {
public name: string;
public age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
简写形式
typescript
class Person {
constructor(
public name: string,
public age: number
) { }
}
protected修饰符
private修饰符
typescript
class Person {
constructor(
public name: string,
public age: number,
// IDCard属性为私有的(private)属性,只能在【类内部】使⽤
private IDCard: string
) {}
private getPrivateInfo() {
// 类内部可以访问私有的(private)属性 ------ IDCard
return `身份证号码为:${this.IDCard}`;
}
getInfo() {
// 类内部可以访问受保护的(protected)属性 ------ name和age
return `我叫: ${this.name}, 今年刚满${this.age}岁`;
}
getFullInfo() {
// 类内部可以访问公开的getInfo⽅法,也可以访问私有的getPrivateInfo⽅法
return this.getInfo() + "," + this.getPrivateInfo();
}
}
const p1 = new Person("张三", 18, "110114198702034432");
console.log(p1.getFullInfo());
console.log(p1.getInfo());
console.log(p1.name);
// 以下代码均报错
// p1.IDCard
// p1.getPrivateInfo()
readonly修饰符
抽象类
概述: 抽象类是一种无法被实例化的类 专门用来定义类的结构和行为,类中可以写抽象方法也可以写具体实现
抽象类主要用来为其派生类提供一个基础结构 要求其派生类必须实现其中的抽象方法
简记:抽象类不能实例化,其意义是可以被继承,抽象类里可以有普通方法,也可以有抽象方法 抽象方法没有函数体 (即没有{})
过以下场景,理解抽象类
我们定义⼀个抽象类 Package ,表示所有包裹的基本结构,任何包裹都有重量属性 weight ,包裹都需要计算运费。但不同类型的包裹(如:标准速度、特快专递)都有不同的运费计算方式,因此用于计算运费的 calculate 方法是⼀个抽象方法,必须由具体的子类来实现。
StandardPackage 类继承了 Package ,实现了 calculate 方法:
第一个weight不写public的原因是因为 weight是父类的属性(本身写一般写法的时候就不需要声明
然后再在构造器里面写this.weight=weight) 只有子类独有的属性 使用简写形式的时候才需要public
总结:何时使用抽象类?
1.定义通用接口:为一组相关的类定义通用的行为(方法或属性)时
2.提供基础实现:在抽象类中提供某些方法或为其提供基础实现,这样派生类就可以继承这些实现
3.确保关键实现:在抽象类中提供某些方法或为其提供基础实现,这样派生类就可以继承这些实现
共享代码和逻辑:当多个类需要共享部分代码时,抽象类可以避免代码重复
接口(interface)
interface是一种定义结构的方式,主要作用是为类 对象 函数等规定一种契约,这样可以确保代码的一致性和类型安全,但要注意
interface 只能定义格式,不能包含任何实现
定义类结构
定义对象结构
注意 对象结构不需要 implements
定义函数结构
接口之间的继承
一个interface继承另一个interface从而实现代码的复用
接口自动合并 (可重复定义)
何时使用接口
1.定义对象的格式:描述数据模型,API响应格式,配置对象等等 是开发中用的最多的场景
2.类的契约:规定一个类需要实现哪些属性和方法
3.扩展已有接口:一般用于扩展第三方库的类型,这种特性在大型项目中可能会用到
一些相似的概念的区别
1.interface和type的区别
相同点:interface和type都可以用于定义对象的结构 在定义对象结构时,两者可以互换
不同点:interface 更专注于定义对象和类的结构 支持继承 合并
type可以定义类型别名 联合类型 交叉类型 但不支持继承和自动合并
2.interface和抽象类的区别
相同点:都能定义一个类的格式(定义类应遵循的契约)
不相同:
接口: 只能描述结构 不能有任何实现代码 一个类就可以实现多个接口
抽象类: 既可以包含抽象方法 也可以包含具体方法 一个类只能继承一个抽象类
泛型
泛型允许我们在定义函数、类或接⼝时,使⽤类型参数来表示未指定的类型,这些参数在具体使⽤时,才被指定具体的类型,泛型能让同⼀段代码适⽤于多种类型,同时仍然保持类型的安全性
举例:如下代码中 就是泛型( 不一定非叫T ) 设置泛型后即可在函数中使用T来表示该类型