我想创建一个其他类将实现和/或扩展的基类。派生类正在执行此操作,因为它们共享许多相同的功能,但有时在它的一部分上有自己的旋转。
abstract class Human {
constructor(protected _name:string) {
}
protected identify():string {
return this._name;
}
abstract doTrick():void;
}
class Boy extends Human {
private jump():void {
console.log("jumping");
}
private doTrick():void {
this.jump();
}
}
这很好用。可以创建Boy
,并根据Human
在identify()
发生时所说的内容来说出他的名字。问题出现在这里:
var person:Human = new Boy("Bob");
我想这样做,因为我有各种Human
派生类,我不想做var person:Boy|Girl|Man|Child|Dinosaur|Whatever
。问题是,这样做会导致error TS2322: Type 'Boy' is not assignable to type 'Human'
。
我觉得我应该可以将person
键入为Human
,即使我已将派生的Boy
类分配给它,因为Boy
类只是Human
类的实现。
我错过了什么?