首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >派生类的不同构造函数签名

派生类的不同构造函数签名
EN

Stack Overflow用户
提问于 2017-03-28 10:42:10
回答 1查看 178关注 0票数 2

如果派生类的构造函数签名与基类不同,这是否违背了oop原则(例如,Liskov原则)?

代码语言:javascript
复制
class Base {
  protected x: number;  
  protected y: number;

  constructor(x: number, y: number) {
    this.x = x;
    this.y = y;
  }
}

class Derived extends Base {
  private text: string; 

  constructor(text: string, x: number, y: number) {
    super(x, y);
    this.text = text;
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-28 11:08:03

不,没有,因为Liskov原理谈到了“子类型中的方法参数和返回类型的逆方差”。当你这样做的时候:

代码语言:javascript
复制
foo(bar:Base){
  //do stuff
}

该方法需要一个实例Base类,而不是构造函数,因此方法的逆反关系不适用于这种情况。

如果您这样做,就会破坏这一原则,因为Base实例不能被Extended实例替换:

代码语言:javascript
复制
class Base{

  foo():string{
    return "";
  }

  bar(arg:string){}

}

class Extended extends Base{

  foo():number{
    return 1;
  }

  bar(arg:boolean){}

}

但是,类型记录编译器不允许这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43067415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档