多态:
子类方法属性相同的前提下:子元素可以使用父元素的类而且各个子元素之间的类型也可以互相使用,这就是多态
子类方法属性不相同的前提下:子元素可以使用父元素的类,但是子元素之间不能相互使用
export default function () {
// 定义一个类
class Animal<K> {
name: K
constructor(name: K) {
this.name = name
}
run(distance = 15): K {
return `${this.name}跑了${distance}公里` as unknown as K;
}
}
class Dog<K> extends Animal<K>{
constructor(name: K) {
super(name);
}
run(distance = 15): K {
return `${this.name}跑了${distance}公里` as unknown as K;
}
walk(item: K): K {
return `小狗去玩了,${item}` as unknown as K;
}
}
class Pig<K> extends Animal<K> {
constructor(name: K) {
super(name);
}
run(distance = 15): K {
return `${this.name}跑了${distance}公里` as unknown as K;
}
sleep<T>(item: T): T {
return `小狗去玩了,${item}` as unknown as T;
}
}
// 实例化一个动物的类
const animal: Animal<string> = new Animal<string>('动物');
animal.run(20);
const dog: Animal<string> = new Dog('哮天犬');
dog.run(20);
const pig: Pig<string> = new Pig('天蓬');
pig.run(20);
console.log(animal.run(20));
console.log(dog.run(20));
console.log(pig.run(20));
}