【问题标题】:Typescript inheritance call function from base class来自基类的打字稿继承调用函数
【发布时间】:2018-10-03 16:11:48
【问题描述】:

我正在使用继承通过基类和派生类拆分逻辑。

在以下情况下:

export class FirstClass{
constructor(){}

//consoleGivenMessage('dummy text');}

export class SecondClass extends FirstClass{
constructor(){
    super();
}

consoleGivenMessage(text:string){
    console.log(text);
}}

从基类调用函数的方法是什么? “consoleGivenMessage(text:string)”是否也应该在基类中实现?

欢迎任何帮助

【问题讨论】:

  • 从基类中调用它是什么意思?是的,你必须在基类中定义它......我认为我们需要更多关于你想要做什么的信息。

标签: typescript oop inheritance


【解决方案1】:

您的问题的简短回答是,您必须在FirstClass 中实现consoleGivenMessage(text: string),以便您可以在FirstClassSecondClass 的实例上调用它。

但是,还有更多——

大多数时候,您从派生类调用继承的方法,而不是反过来。但是,您也可以拥有一个基类,该基类依赖于在派生类中实现的 abstract 方法。

说,你有一个类A,它依赖于一个方法DoIt(),它只在派生类B中实现,你必须将A声明为抽象类,DoIt()作为抽象方法;然后,在B(不是抽象的——也就是说,它是具体的)中,你将实现方法DoIt()。

这也意味着您无法实例化A 的对象,因为如果没有DoIt 的完整实现它是不完整的,但您可以实例化B 的对象。但是,您可以定义A 的对象,如下所示:const a: A = new B()。并且,您可以致电a.DoIt()。在这种情况下,B.DoIt() 的实现实际上会被调用。

此技术用于Template Method design pattern

TypeScript 类、继承和抽象类是well documented

【讨论】:

  • 那是对 OO 继承的深入探讨,感谢您的详细回复。这很有帮助
  • 只是避免从基类构造函数调用子方法。虽然在技术上是可行的,但它仍然是not recommended,因为它可能会导致与初始化顺序相关的问题。
  • @AlexChe -- 是的,当然 :-)
猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 2020-03-19
  • 2017-12-04
  • 2022-01-11
  • 1970-01-01
  • 2013-03-30
  • 2020-05-07
  • 1970-01-01
相关资源
最近更新 更多