抽象クラス
その中の抽象クラスと抽象メソッドを定義するための抽象。
抽象クラスとは何ですか?
まず、抽象クラスをインスタンス化することを許可されています。
抽象 クラス動物{ 公共の名前。 パブリックコンストラクタ(名前){ この .nameの= 名前。 } パブリック 抽象sayHi()。 } ましょう = 新しい動物(「ジャック」); // index.ts(9,11):エラーTS2511:抽象クラス「アニマル」のインスタンスを作成することはできません。
上記の例では、抽象クラス動物を定義し、抽象メソッドsayHiを定義します。時間の例では、抽象クラスを与えられました。
第二に、抽象メソッド抽象クラスは、サブクラスを実装する必要があります。
抽象 クラス動物{ 公共の名前。 パブリックコンストラクタ(名前){ この .nameの= 名前。 } パブリック 抽象sayHi()。 } クラス猫動物{延び 公共食べる(){ にconsole.log( `$ { この .nameのは} であるeating.`)を、 } } 猫ましょう = 新しい猫(' トム' ); // index.ts(9,7):エラーTS2515:非抽象クラスの猫は"クラス「動物」から継承された抽象メンバー「sayHi」を実装していません。
上記の例では、定義したクラスキャットは、抽象クラスの動物を継承しますが、抽象メソッドsayHiを実装していないので、コンパイラが指定されています。
以下は、抽象クラスの適切な使用の例です。
抽象 クラス動物{ 公共の名前。 パブリックコンストラクタ(名前){ この .nameの= 名前。 } パブリック 抽象sayHi()。 } クラスキャットは、動物{拡張 公共sayHi(){ はconsole.log( `ニャーは、私の名前はある $ { この` .nameのを}); } } 猫ましょう = 新しい猫(' トム');
上記の例では、コンパイラによって、sayHi抽象メソッドを実装しました。
メソッドが抽象的であったとしても、活字体の結果をコンパイルする、ということに注意することは、やはり上記のコードの結果をまとめ、このクラスであり、そこに次のようになります。
VaRの __extends =(この && この .__が延びる)|| 関数(D、B){ 用(VARの P における B)であれば(b.hasOwnProperty(P))D [P] = B [P]。 関数__(){ この .constructor = D。} d.prototype = B === ヌル?Object.create(B):(。__試作品= b.prototype、新しい__()); }。 VAR動物= (関数(){ 関数動物(名前){ この .nameの= 名; } 戻り動物を; })(); VaRの猫= (関数(_super){ __extends(猫、_super); 機能キャット(){ _super.apply(この、引数); } Cat.prototype.sayHi = 関数(){ にconsole.log(' ニャー、私の名前ある' + この; .nameのは) }; 戻り猫; }(動物))。 VaRの猫= 新しい猫(' トム');