有条件的继承可能吗?

时间:2019-02-02 09:42:05

标签: typescript

我是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

到底有没有可行,或者唯一的方法是在基类中将该方法声明为抽象方法,然后分别针对这两种情况实现该方法?

1 个答案:

答案 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);                               // <===
  }
}

提供乘数的方法有很多种,但这只是一个例子。