一.类
先举一个简单的例子
class Person{
name: string = '小四'
age: number = 18
static gender: string = 'male'
}
const per = new Person()
- 直接定义的属性是类的实例属性,需要通过类的实例对象访问
const per = new Person(); per.name
- 使用static开头的属性是静态属性(类属性),可以直接通过类去访问
Person.gender
- readonly开头的属性表示一个只读的属性,其无法修改
二.构造函数
构造函数会在对象创建时调用
class Dog{
name: string
age: number
constructor(name:string,age:number){
this.name = name
this.age = age
}
}
const dog = new Dog('小四',18)
- 在实例方法中,this就是当前的实例
- 在构造函数中当前对象就是当前新建的对象
三.继承extends
- 使用继承后,子类会拥有父类所有的方法和属性
- 如果在子类中添加了和父类相同的方法,则子类方法会覆盖掉父类的方法,这种形式叫方法重写
四.super
- super表示当前类的父类
class Animal{
name:string
constructor(name:string){
this.name = name
}
}
class Dog extends Animal{
age:number
constructor(name:string,age:number){
super(name) // 调用父类的构造函数
this.age = age
}
}
const dog = new Dog('小四',18)
- 如果在子类中写了构造函数,在子类构造函数中必须对父类的构造函数进行调用
- 通过
super()
调用父类的构造函数
五.抽象类
- 以
abstract
开头的类是抽象类 - 抽象类和其他类区别不大,只是不能用来创建实例对象
- 抽象类就是专门用来被别人继承的类
- 抽象类中可以有普通方法,也可以有抽象方法
抽象方法:
- 抽象方法使用
abstract
开头,没有方法体 - 抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写
abstract class Animal{
abstract sayHello():void
}
六.接口(新增)
- 接口用来定义一个类结构,定义一个类中应该包含哪些属性和方法
- 同时接口也可以当成类型声明去使用
- 语法:
interface myInterface{
name: string;
age: number;
}
const obj: myInterface = {
name:'sss';
age:18
}
- 接口可以在定义类时去限制类的结构
- 接口中所有的属性都不能有实际的值,即接口只定义对象的结构,而不考虑实际值,在接口中所有的方法都是抽象方法
interface myInter{
name: string;
sayHello():void
}
- 定义类时,可以使用类去实现接口,实现接口就是使类满足接口的要求,相当于对类的一个规范
class Myclass implements myInter{
name: string;
constructor(name:string){
this.name = name
}
sayHello(){
console.log('大家好~')
}
}