[解決済み] TypeScriptの「extends」と「implements」の違いとは?
質問
を知りたいのですが。 男性 そして 子 の共通点と相違点です。
class Person {
name: string;
age: number;
}
class Child extends Person {}
class Man implements Person {}
解決方法は?
ショートバージョン
-
extends
を意味します。
その 新しいクラスは . これは継承によってもたらされる利益を得ることができます。すべてのプロパティとメソッドを親と同じように持つことができます。これらのいくつかをオーバーライドして新しいものを実装することができますが、親のものはすでに含まれています。
-
implements
を意味します。
その
新しいクラス
として扱うことができます。
同
"shape"。
一方
子ではありません
. このメソッドは
Person
と異なる親を持つかどうかに関係なく
Person
もっと見る ...
で OOP (C#、Javaなどの言語) を使用します。
extends
相続で利益を得るために(参照
ウィキ
). 小出しにする。
... クラスベースのオブジェクト指向言語における継承は、あるオブジェクトが親オブジェクトのすべてのプロパティと振る舞いを取得するメカニズムである。継承によってプログラマは、既存のクラスの上にさらにクラスを作成することができるようになります ...
implements
はポリモーフィズムのために多くなります (
ウィキ
). 小出しにする。
ポリモーフィズムとは、異なるタイプのエンティティに単一のインターフェイスを提供することです。
ということで、私たちの
class Man
.
class Man extends Human ...
が、別のタイプのふりをすることも宣言しておくと -。
Person
:
class Man extends Human
implements Person ...
...そうすれば、どこでも使えるようになります。
Person
が必要です。私たちはただPersonsの
"interface"
(すなわち、そのパブリックなものをすべて実装する)
.
implement
他のクラス?それは本当にクールなものです
ジャバスクリプトの素敵な顔 (メリットの1つ) は、ダックタイピングのビルトインサポート( wikiを見る ). 小出しにします。
アヒルのように歩き、アヒルのように鳴くのであれば、それはアヒルに違いない。
つまり、Javascriptでは、2つの異なるオブジェクトが、1つの似たようなメソッドを持っている場合
(例)
render()
)
を期待する関数に渡すことができます。
function(engine){
engine.render() // any type implementing render() can be passed
}
これを失わないために、Typescript では、より型付けされたサポートを用いて、同じことを行うことができます。そしてそれが
class implements class
にはその役割があり、それは意味のあるものです。
として、OOP言語では
C#
... 方法がない...。
また、ここではドキュメントが役立つはずです。
<ブロッククオートクラスを拡張するインターフェイス
インターフェース型がクラス型を拡張する場合、そのクラス型のメンバを継承します。 クラスの実装は含まれません。これは、あたかもインターフェイスが クラスのすべてのメンバを宣言しているのに、そのメンバを提供せずに 実装が必要です。インターフェイスはプライベートとプロテクトも継承します。 のメンバは、ベースクラスのメンバと同じです。つまり、インターフェイスを作成する場合 クラスを拡張し、プライベートまたはプロテクトされたメンバを持つインターフェイスは の型は、そのクラスかそのサブクラスでしか実装できません。
これは、大きな継承階層がありながら、その中で を持つサブクラスのみで動作するように指定することができます。 プロパティがあります。を継承していること以外には、サブクラスは関係する必要がありません。 ベースクラスから 例えば
class Control {
private state: any;
}
interface SelectableControl extends Control {
select(): void;
}
class Button extends Control implements SelectableControl {
select() { }
}
class TextBox extends Control {
select() { }
}
// Error: Property 'state' is missing in type 'Image'.
class Image implements SelectableControl {
private state: any;
select() { }
}
class Location {
}
だから、一方
-
extends
は、親からすべてを取得することを意味します。 -
implements
この場合、ほとんどインターフェースの実装のようなものです。子オブジェクトは親であるかのように装うことができます......しかし、それはどんな実装も得られません
関連
-
[解決済み】Typescriptで、! (エクスクラメーションマーク/バン)演算子でメンバを再参照するのは?
-
[解決済み] eslintをtypescriptで使用する - モジュールへのパスを解決できない
-
[解決済み] TypeScriptの非同期関数でプロミスを返す
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] コンストラクタとngOnInitの違いについて
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み] クラス定数を実装するには?
-
[解決済み] Typescript は ?演算子をサポートしていますか?(そして、それは何と呼ばれているのでしょうか?)
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み】インプリメントとエクステンド。いつ使う?その違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プロパティ 'value' が 'HTMLElement' 型の値に存在しない。
-
[解決済み】ブロックスコープ付き変数の再宣言ができない(typescript)
-
[解決済み] タイプスクリプトのコンパイルで「tsc コマンドが見つかりません。
-
[解決済み] error TS2339: Property 'x' does not exist on type 'Y'.
-
[解決済み] Typescript コンパイルエラー: error TS1109: 期待される式
-
[解決済み] TypeScript - Angular: 複数行の文字列
-
[解決済み] Typescriptでオブジェクトのプロパティを結合する方法は?
-
[解決済み] Typescript オブジェクトのインデックス付きメンバの型を強制する?
-
[解決済み] AngularでNameServiceのプロバイダがない
-
[解決済み】オブジェクトの配列を定義するにはどうしたらいいですか?