TS之静态属性、静态⽅法抽象类、抽象⽅法
1.静态属性&静态⽅法
class Person {
public name: string; // 保护属性
public age: number = 20;
static sex: string = "男";
constructor(name: string) {
this.name = name;
};
run() { // 实例⽅法
console.log(`${this.name}在奔跑`);
}
work() {
console.log(`${this.name}在⼯作`);
}
static print() { //静态⽅法
console.log('print⽅法');
console.log('print⽅法' + this.age); // 报错,静态⽅法⾥⽆法直接调⽤当前类属性(只能调⽤静态属性)this.age是undefined
console.log('print⽅法' + this.sex);
}
}
let p = new Person("张三")
抽象类的使用// 调⽤实例⽅法
p.run();
// 调⽤静态⽅法
Person.print();
2.多态 ——⼀个函数,在不同情况下表现出不同的状态,就称为多态
包括两种情况:
重载(overload):⼀个函数,根据传⼊的实参值不同,选择执⾏不同的逻辑
重写(override):⼦对象中定义了和⽗对象中同名的⽅法,当使⽤这个⽅法时,使⽤的时⼦对象这个⽅法,⽽不会使⽤⽗对象中的⽅法以重写为例:
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
// ⽗类的⽅法
eat() {
console.log('吃的⽅法');
}
}
class Dog extends Animal {
constructor(name: string) {
super(name);
}
/
/ 字类改写
eat() {
return this.name + "吃⾁"
}
}
class Cat extends Animal {
constructor(name: string) {
super(name)
}
// 字类改写
eat() {
return this.name + "吃鱼"
}
}
2.抽象类&抽象⽅法
(1)抽象类
标准:⼀个类要求它的字类必须包含指定⽅法,它是提供其他类继承的基类,不能被直接实例化。
定义抽象类:
abstract class Animal {
abstract eat():any ;
}
let a=new Animal(); // 报错:⽆法创建抽象类的实例
(2)抽象⽅法
抽象⽅法在⼦类⾥⾯必须实现
// ⽗类
abstract class Animal {
public name: string;
constructor(name: string) {
this.name = name;
}
abstract eat(): any;
}
// ⼦类Dog
class Dog extends Animal {
constructor(name: string) {
super(name);
}
// 抽象类的⼦类必须实现抽象类⾥⾯的抽象⽅法
eat() {
console.log(this.name + '在吃⾁');
}
}
let d = new Dog('达摩');
d.eat();
/
/ ⼦类Cat
class Cat extends Animal {
constructor(name: string) {
super(name);
}
}
⼦类Cat不实现eat()⽅法,会报错:⾮抽象类“Cat”不会实现继承⾃“Animal”类的抽象成员“eat”,即⼦类Cat不会⾃动继承⽗类的⽅法
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论