小知识,大挑战!本文正在参与“ 程序员必备小知识 ”创作活动
本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金
类
修饰符
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()
接口与抽象类的区别
- 接口中无法实现方法(全部都只能定义),抽象类可以有
- 子类只能继承一个抽象类,而可以实现多个接口(用逗号隔开)
- 接口中不能有构造器(constructor),抽象类可以有