クラス
class Person {
// プロパティ
protected name:string = '名無し'; // サブクラスからもアクセスできるが変更できない
private mail?:string; // サブクラスからもアクセスできない
public age?:number; // どこからでもアクセスできる(publicをつけないとこれ)
// 初期処理
constructor(name:string, mail:string = 'no-mail', age:number = -1){
this.name = name;
this.mail = mail;
this.age = age;
}
// メソッド
print():void{
console.log(this.name + '(' + this.mail + ','+this.age + ')');
}
}
enum School {
junior = 'junior',
juniorHigh = 'juniorHigh',
high = 'high',
other = 'other'
}
class Strudent extends Person {
school?:School
private _grade_num:number = -1;
get grade_num():number{
return this._grade_num;
}
private set grade_num(val:number){
this._grade_num = val;
}
get grade():string{
return this._grade_num + ({
1:'st',
2:'nd',
3:'rd'
}[this._grade_num] || 'th');
}
constructor(name:string,school:School,grade:number){
// スーパークラスのコンストラクタを呼ぶ
super(name);
this.school = school;
this.grade_num = grade;
switch(school){
case School.junior:
this.age = 6 + this.grade_num;
break;
case School.juniorHigh:
this.age = 12 + this.grade_num;
break;
case School.high:
this.age = 15 + this.grade_num;
break;
default:
this.age = -1;
}
}
// メソッドオーバーライド
print():void{
console.log(this.name + '(' + this.school + ':'+ (this.grade || '-') + ')');
}
}
const taro = new Person('taro','aaa@aaa.com',39);
taro.print();
const hanako = new Strudent('hanako',School.high,2);
hanako.print();
インターフェース
クラスに指定することで使う。
インターフェースに用意されたものは必ず使うことになる。
// interface は基本public
interface input{
value:string|number,
placeholder?:string|number,
}
class Input implements input{
value:string|number;
placeholder:string|number;
constructor(value:string|number, placeholder:string|number = ''){
// 継承関係はないのでsuperは不要
this.value = value;
this.placeholder = placeholder;
}
showLog():void{
console.log(this.value,this.placeholder);
}
}
class Radio implements input{
value:string|number;
list:string[]|number[];
constructor(value:string|number, list:string[]|number[]){
this.value = value;
this.list = list;
}
showLog():void{
console.log(this.value,this.list);
}
}
インターフェース自体も継承もできる
interface People extends Human {
birth:Date
}
抽象クラス
他の何かのクラスを継承するなら使えない
protect メソッドがいるなら抽象クラス
abstract class 抽象クラス名{
abstract 抽象メソッド():型
}
class サブクラス extends 抽象クラス名{
constructor(){
super()
}
抽象クラス名():型{
}
}
静的メンバー
インスタンスを生成する必要がないときはそのまま使える。
その場合はメンバーやメソッドは静的で宣言。
static プロパティ:型
static メソッド(引数):型
パラメータプロパティ
総称型クラス