スタートページ>
Javascript>
TypeScript
TypeScriptの概要←
型指定の基本(1)←
型指定の基本(2)←
型指定の基本(3)→
型指定の基本(4)
1 class 自動車クラス {
2 // プロパティ
3 車名: string;
4 区分: string;
5 排気量: number;
6 // コンストラクタ
7 constructor(車名: string, 区分: string, 排気量:number) {
8 this.車名 = 車名;
9 this.区分 = 区分;
10 this.排気量 = 排気量;
11 }
12 // メソッド
13 車表示() {
14 console.log(this.車名 + ", " + this.区分 + ", " + this.排気量)
15 }
16 }
このクラスで用いる変数(通常はデータベースのレコードの属性)と型の定義です。
レコードが、
自動車 = = new 自動車クラス(車名, 区分. 排気量);
ならば、車名, 区分. 排気量が列挙されます。
データが入力されたときの初期設定です。
constructor(車名: string, 区分: string, 排気量:number)
は、プロパティと重複していますが、これは外部から
自動車 = new 自動車クラス(車名, 区分. 排気量);
として与えられることを想定しているからで、外部では
自動車 = new 自動車クラス(name, type. cc);
の変数を用いているならば、
constructor(name: string, type: string, cc:number) {
this.車名 = name;
this.区分 = type;
this.排気量 = cc;
と指定します。
this とは、「ここでの」という意味です。「自動車.車名」の「自動車」を一般化しています。
メソッドは、class 内で、this.xx をグローバル変数とした、関数の機能です。
ここでは、入力データを console.log していますが、関数と同様、この時点では実行されません。
外部から 車A.車表示(); のように呼び出せれた時点で実行されます。
通常の関数なら 車表示(車A)の形式になりますが、メソッドでは 車A.車表示() の形式になります。
17
18 // クラスブロック外からの処理
18 var 車A = new 自動車クラス('スカイライン', '乗用車',1500);
19 車A.車表示(); // スカイライン, 乗用車,1500 class内のメソッドの実行
20 console.log(車A.区分); // 乗用車 class によりこのような形式ができる。
21
22 var 車B = new 自動車クラス('カーゴ', 'トラック',9200);
23 if (車A.排気量 >= 車B.排気量) { // このような通常のプログラムが記述できる。
24 var 大排気量区分 = 車A.区分;
25 }
26 else 大排気量区分 = 車B.区分;
27 console.log(大排気量区分); // トラック
28
29 var 車C = new 自動車クラス('カワサキ', 'オートバイ',400cc); // 排気量の型エラー
「自動車クラス」をスーパークラスとして、サブクラス「乗用車クラス」を定義します。
スーパークラスでのプロパティ「車名、区分、排気量」の設定を継承し、さらに「乗車人数」を加えます。
30
31 // ========== サブクラス =============
32 class 乗用車クラス extends 自動車クラス {
33 乗車人数 : number;
34 // コンストラクタ
35 constructor(車名: string, 区分: string, 排気量:number. 乗車人数:number) {
36 super(車名, 区分, 排気量);
37 this.乗車人数 = 乗車人数;
38 }
39 }
サブクラスは、次の形式で定義します。
class サブクラス extends スーパークラス { // extend は「拡張」の意
}
スーパークラスからのプロパティを継承して、さらにサブクラスで新プロパティを追加するには、 コンストラクタで次の形式で指定します。
constructor(入力される全プロパティと型) {
super(継承するプロパティ);
this.新プロパティ = 新プロパティ;
}
40 // 外部からの処理
41 var 車D = new 乗用車クラス('マーク2', '乗用車',1500, 5);
42 console.log(車D.乗車人数); // 5 OK
43 console.log(車B.乗車人数); // エラー 車Bは自動車クラスで乗車人数項目はない
44 var 車E = new 乗用車クラス('クラウン', '乗用車',2500); // 乗車人数が欠けている
Classのプロパティとメソッドは、アクセス修飾子により、アクセス可能/禁止を設定できます。
一般形 アクセス修飾子 変数 : 型;
例: private 氏名: string;
1 class 学生クラス {
2 // プロパティ
3 private 氏名: string;
4 public 学部: string;
5 readonly 年齢: number;
6 // コンストラクタ
7 constructor(氏名: string, 学部: string, 年齢: number) {
8 this.氏名 = 氏名;
9 this.学部 = 学部;
10 this.年齢 = 年齢;
11 // 内部処理
12 this.年齢++; // 内部処理は修飾子に関係なく処理できます。
13 console.log(this.氏名 + ", " + this.学部 + ", " + this.年齢);
14 // "阿部, 文学部, 21" 年齢は入力データが20だったのが21になる
15 }
16 // メソッド
17 private 氏名表示() {
18 console.log(this.氏名)
19 }
20 学部表示() { // 修飾子省略 public
21 console.log(this.学部)
22 }
23 }
24
25 // レコードの作成
26 var 学生A = new 学生クラス('阿部','文学部',20); // 修飾子に関係なく読み込まれます。
27 // 外部からの参照
28 console.log(学生A.氏名); // 氏名は private なので外部からアクセスできません。
29 console.log(学生A.学部); // 学部は public なので、外部からアクセスできます。
30 console.log(学生A.年齢); // 年齢は readonly なので、更新はできないが読むことはできます。
31 学生A.氏名表示(); // このメソッドは private なので外部からアクセスできません。
32 学生A.学部表示(); //このメソッドは public なので外部からアクセスできます。
33 // 外部からの更新
34 学生A.氏名 = '井上'; // 氏名は private なので外部から更新できません。
35 学生A.学部 = '工学部'; // 学部は public なので外部から更新できます。
36 学生A.年齢 = 22; // 年齢は readonly なので更新できません。