別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。
よし、次はクラスだ。
メンバ変数、関数は次のように宣言する。varやfunctionはなしで変数や関数の宣言と同じように書く。アクセス修飾子は、public、privateだけでprotectedはないようだ。
class Hoge1 {
// メンバ変数
private aaa:number;
// コンストラクタ
constructor(a:number) {
this.aaa = a;
}
// メンバ関数
public hoge():number {
return this.aaa;
}
private hogeHoge():number {
return 44;
}
// プロパティ
// アクセッサ(set)
public set AAA(val:number) {
alert("set");
this.aaa = val;
}
// アクセッサ(get)
public get AAA():number {
alert("get");
return this.aaa;
}
}
var hoge1:Hoge1 = new Hoge1(20);
alert(hoge1.AAA);
hoge1.AAA = 33;
alert(hoge1.hoge()); // メンバ関数を呼び出す。
alert(hoge1.hogeHoge()); // プライベートなんでエラー
継承は次のような感じ。クラス名のあとにextendsでスーパークラス名を書く。
コンストラクタでスーパークラスのコンストラクタを呼ぶのはsuper()で呼び出さないといけない。superでスーパークラスの関数や変数、プロパティにアクセスできる。
関数のオーバーライドは同じ関数を宣言するだでオーバーライドできる。
class Hoge1 {
// メンバ変数
private aaa:number;
// コンストラクタ
constructor(a:number) {
this.aaa = a;
}
// メンバ関数
public hoge():string {
return "Hoge1.hoge()";
}
// プロパティ
// アクセッサ(set)
public set AAA(val:number) {
this.aaa = val;
}
// アクセッサ(get)
public get AAA():number {
return this.aaa;
}
}
class Hoge2 extends Hoge1 {
private bbb:number;
constructor() {
super(234); // スーパークラスのコンストラクタ呼び出し
this.bbb = 2;
}
public hoge():string {
return "Hoge2.hoge()";
}
public hoge2():string {
return super.hoge(); // superでスーパークラスの関数を呼び出す。
}
public getBBB():number {
return this.bbb;
}
}
var hoge1:Hoge1 = new Hoge2(); // 継承してるのでHoge1型の変数に代入できる
alert(hoge1.hoge()); // "Hoge2.hoge()"が表示され、オーバーライドできてるのが確認できる
alert(hoge1.AAA); // "234"が表示される
var hoge2:Hoge2 = <Hoge2>hoge1; // これでダウンキャストできる
alert(hoge2.hoge2());
alert(hoge2.getBBB());
インターフェイスについては次のメモ(予定)で書こうかな。
コメント