計算機科学のブログ

クラスとインターフェース constructor、private、protected、派生クラス

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発(Boris Cherny(著)、今村 謙士(監修)、原 隆文(翻訳)、オライリー・ジャパン)の5章(クラスとインターフェース)、5.13(練習問題)2の解答を求めてみる。

コード

// privateの場合
class C {
    private constructor() { }
    static create() {
        return new C()
    }
}

// 以下はエラー
// Constructor of class 'C' is private and only accessible within the class declaration.
// let c = new C()

let c = C.create()
console.log(c)

// 以下はエラー
// Cannot extend a class 'C'. Class constructor is marked as private.
// class D extends C { }

class D {
    protected constructor() { }
    static create() {
        return new D()
    }
}

// 以下はエラー
// onstructor of class 'D' is protected and only accessible within the class declaration.
// let d = new D()

let d = D.create()

console.log(d)

// protectedの場合、privateの場合と違って派生クラスを作成できる
class E extends D {
    constructor() {
        super()
    }
}

let e = new E()

console.log(e)

入出力結果(Terminal, Zsh)

% ts-node sample2.ts
C {}
D {}
E {}
%