TypeScriptでは、クラスを実装または拡張できることがわかっています。上記の2つのオブジェクト指向言語では実装できるのはクラスだけで、クラスだけなので、一部のC#またはJavaベースの学生はこれについて混乱する可能性があります。拡張するために。TypeScriptでこれら2つのキーワードがどのように異なるかを説明しましょう。最近StackOverflowでこの問題を見つけたので、翻訳して記録しました。元のアドレスは次のとおりです:https://stackoverflow.com/questions/35990538/extending-vs-implementing-a-pure-abstract-class- in-typescript / 35990799#35990799
問題の説明
TypeScriptでの純粋な抽象クラスの拡張と実装
クリーンな抽象クラスAがあるとします。
抽象クラスA { 抽象m():void; }
継承に関しては、C#やJavaのように、この抽象クラスを次のように継承できます。
// TypeScript
クラスBはA {
}を拡張します
ただし、実装に関しては、TypeScriptでクラスを実装することもできます。
クラスCはA { m()を実装します:void {} }
それで、ここに質問があります:クラスBとクラスCの動作の違いは何ですか?どうやって選ぶの?
質疑応答
implementsキーワードは、クラスAをインターフェースとして扱います。つまり、クラスCは、クラスAにデフォルトの実装があるかどうかにかかわらず、クラスCがAで定義されているすべてのメソッドを実装する必要があります。同時に、クラスCでスーパーメソッドを定義する必要はありません。
そして、extendsキーワード自体の意味と同様に、クラスAで定義された仮想メソッドを実装するだけでよく、super呼び出しも有効になります。
抽象メソッドの場合、これは何の違いもないと思います。ただし、抽象メソッドのみを使用するクラスは非常に少ないため、抽象メソッドのみを使用する場合は、それらをインターフェイスに変換することをお勧めします。
転載:https://www.cnblogs.com/pangjianxin/p/10901115.html
TypeScriptでは、クラスを実装または拡張できることがわかっています。上記の2つのオブジェクト指向言語では実装できるのはクラスだけで、クラスだけなので、一部のC#またはJavaベースの学生はこれについて混乱する可能性があります。拡張するために。TypeScriptでこれら2つのキーワードがどのように異なるかを説明しましょう。最近StackOverflowでこの問題を見つけたので、翻訳して記録しました。元のアドレスは次のとおりです:https://stackoverflow.com/questions/35990538/extending-vs-implementing-a-pure-abstract-class- in-typescript / 35990799#35990799
問題の説明
TypeScriptでの純粋な抽象クラスの拡張と実装
クリーンな抽象クラスAがあるとします。
抽象クラスA { 抽象m():void; }
継承に関しては、C#やJavaのように、この抽象クラスを次のように継承できます。
// TypeScript
クラスBはA {
}を拡張します
ただし、実装に関しては、TypeScriptでクラスを実装することもできます。
クラスCはA { m()を実装します:void {} }
それで、ここに質問があります:クラスBとクラスCの動作の違いは何ですか?どうやって選ぶの?
質疑応答
implementsキーワードは、クラスAをインターフェースとして扱います。つまり、クラスCは、クラスAにデフォルトの実装があるかどうかにかかわらず、クラスCがAで定義されているすべてのメソッドを実装する必要があります。同時に、クラスCでスーパーメソッドを定義する必要はありません。
そして、extendsキーワード自体の意味と同様に、クラスAで定義された仮想メソッドを実装するだけでよく、super呼び出しも有効になります。
抽象メソッドの場合、これは何の違いもないと思います。ただし、抽象メソッドのみを使用するクラスは非常に少ないため、抽象メソッドのみを使用する場合は、それらをインターフェイスに変換することをお勧めします。