1.静态属性,静态方法
class Person {
name: string;
static age: number = 20; //定义静态属性
//构造函数
constructor(name: string) {
this.name = name;
}
//静态方法 无返回值
static run(): void {
console.log(`${Person.age}静态属性`); //获取静态属性,结果是20静态属性
//不能直接获取内部的属性 比如this.name
}
work(): string {
return `我是${this.name}`;
}
}
let p = new Person("张三"); //实例化
Person.run(); //结果是20静态属性 调用静态方法
console.log(p.work());
console.log(Person.age); //调用静态属性
2.多态
//多态 属于继承
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}再吃东西`;
}
}
3.抽象
抽象类提供其他继承的基类,不能被实例化
用abstract定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现,并且必须在派生类中实现
abstract抽象方法必须放在抽象类里面
//抽象 一般用于制定标准
abstract class Animal {
name: string;
protected constructor(name: string) {
//constructor尽量设置成protected
this.name = name;
}
//抽象方法
abstract eat(): any;
//非抽象方法派生类可以不实现
run(): void {
alert(`父类非抽象方法:${this.name}`);
}
}
//派生类 子类
class Dog extends Animal {
constructor(name: any) {
super(name);
}
//派生类必须实现抽象方法,不实现会报错
eat(): void {
console.log(this.name);
}
}
let d = new Dog("dg");
d.eat(); //结果是dg
d.run(); //alert出来 父类非抽象方法:dg