我是OOP范式的新手,我想知道条件继承在TS中是否有可能,这可以消除重复编写代码的需要。以下是我的想法。任何建议都将受到欢迎。
interface Person {
name: string;
age: number;
}
interface Animal {
genre: string;
age: number;
}
abstract class Base {
private velocity: number = 1;
run() {
// if Person extends base return velocity * 0.2; ??
return this.velocity * 0.4;
}
}
class Human extends Base implements Person {
...
}
class Dog extends Base implements Animal{
...
}
let marie = new Human('Marie', 22);
marie.run() //should be 0.2
let bennie = new Dog(...);
bennie.run() // should be 0.4
到底有没有可行,或者唯一的方法是在基类中将该方法声明为抽象方法,然后分别针对这两种情况实现该方法?
答案 0 :(得分:2)
通常的方法是保存在初始化期间设置的乘数,也许是让子类将其提供给超类:
abstract class Base {
private velocity: number = 1;
constructor(private multiplier) { // <===
}
run() {
return this.velocity * this.multiplier;
}
}
class Human extends Base implements Person {
constructor() {
super(0.2); // <===
}
}
class Dog extends Base implements Animal{
constructor() {
super(0.4); // <===
}
}
提供乘数的方法有很多种,但这只是一个例子。