dojo.declare()を使用すると、他のクラスを継承して、新しいクラスを作成することも可能だ。継承を行うためには、dojo.declare()の第2引数にクラスを指定すればよい。

たとえば、Humanを継承してSuperManを作る場合は以下のようにすればよい。

    dojo.declare("SuperMan", Human, {...});

さらに、Dojoは多重継承もサポートしている。複数のクラスを親クラスに持ちたい場合は、第2引数にクラスの配列を指定する。

    dojo.declare("CatMan", [Human, Cat], {...});

たったこれだけで、親クラスのすべての属性とメソッドを引き継いだ、新しいクラスが作成される。あとは、継承に関係する細かいルールを見ていこう。

親クラスのコンストラクタは自動で呼び出される

親クラスのコンストラクタは、明示的な呼び出しを行わなくとも自動的に呼び出される。

親クラスのメソッドを使用する場合は、`this.inherited()`を用いる

親クラスのメソッドを呼び出したい場合は、すべてのクラスが持っている「inherited()」というメソッドを呼び出せばよい。inherited()の呼び出し方は、用途に応じて複数用意されている。

まず、オーバーライドしたメソッド内から、親クラスが持つ同名のメソッドを呼び出す場合は、引数を1つだけ指定する。

    override_func: function() {
      ...(略)...

      // 親クラスが持つ、同名のメソッドを呼び出し
      this.inherited(arguments);
    }

親クラスが持つメソッドを、名前を指定して呼び出すには、第1引数にメソッド名を指定する。

    override_func: function() {
      ...(略)...

      // 親クラスが持つ、メソッド「someFunc」を呼び出し
      this.inherited("someFunc", arguments);
    }

さらに、引数を追加して親クラスのメソッドを呼び出すこともできる。追加の引数は、引数リストの最後に配列で指定する。

    // オーバーライドした同名のメソッドを追加の引数とともに呼び出す
    this.inherited(arguments, ["added", "arguments"]);

    // 親クラスが持つメソッド「someFunc」を、追加の引数とともに呼び出す
    this.inherited("someFunc", arguments, ["added", "arguments"]);