TypeScript 类

375 阅读1分钟

小知识,大挑战!本文正在参与“  程序员必备小知识  ”创作活动

本文同时参与 「掘力星计划」  ,赢取创作大礼包,挑战创作激励金

修饰符

public,protected,private

  • public:都可以访问
  • protected:类内部跟子类可以访问
  • private:只有类内部函数可以访问
class User {
	public name: string
	protected sex: string
	private age: number
	constructor(name: string, age: number, sex: string) {
		this.name = name
		this.age = age
		this.sex = sex
	}
	getInfo() {
		//类内部任何属性或方法都可以访问
		console.info(`名字叫${this.name},今年${this.age}岁,性别:${this.sex}`)
	}
	protected eat() {
		console.info('人都会吃饭!')
	}
}

class Teacher extends User {
	getInfo() {
		//子类只可以访问public与protected修饰的属性或方法
		console.info(`名字叫${this.name} ,性别:${this.sex}`)
		super.eat()
	}
}

const user = new User('张三', 23, '男')
console.info(user.name) //只可以访问public修饰的属性或方法
user.getInfo()
// user.eat() //不可以
const teacher = new Teacher('张教授', 45, '女')
teacher.getInfo()

readonly:只读属性

class Tiger {
   readonly name: string
   constructor(name: string) {
   	this.name = name
   }
}
const female: Tiger = new Tiger('母老虎')
// female.name = '温柔妹子' //那是不可能的

static:修饰的属性或函数可以通过类直接访问

class Boss {
	static sname: string = '张总'
	static meeting() {
		console.info('秘书,组织下会议')
	}
}
console.info(Boss.sname)
Boss.meeting()

接口

接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法

interface Radio {
	name: string
	switchRadio(): void
}
interface Battery {
	checkBatteryStatus()
}
//1.实现两个接口用逗号隔开
class CellPhone implements Radio, Battery {
	name: string
	switchRadio(): void {}
	checkBatteryStatus() {}
}
class Car implements Radio {
	name: string
	switchRadio(): void {}
}
//2.采用继承
interface RadioWithBattery extends Radio {
	checkBatteryStatus()
}
class CellPhone2 implements RadioWithBattery {
	name: string
	checkBatteryStatus() {}
	switchRadio() {}
}

抽象类

用abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类(抽象类的子类)中实现

abstract class People {
	abstract name: string
	age: number
	constructor(age: number) {
		// this.name = name
		this.age = age
	}
	commonInfo(): void {
		console.info(`his name is ${this.name},age is ${this.age}`) //his name is 张三,age is 22
	}
	abstract getInfo()
}
class Man extends People {
	name: string
	constructor(name, age) {
		super(age)
		this.name = name
	}
	getInfo() {
		console.info(this.name)
	}
}
const zs = new Man('张三', 22)
zs.commonInfo()
zs.getInfo()

接口与抽象类的区别

  1. 接口中无法实现方法(全部都只能定义),抽象类可以有
  2. 子类只能继承一个抽象类,而可以实现多个接口(用逗号隔开)
  3. 接口中不能有构造器(constructor),抽象类可以有