ここは、ふぇりあ16歳が不定期に連載しているオンライン小説のページです。

VNIふぇりあ16歳へ


ゼロからわかる現代JavaScript

28.メソッドのオーバーライド

オブジェクト指向の特徴として

クラスの継承時のオーバーライドがあります。

今回使用するソースコード
var mc2 = new MyClass2();
mc2.magic();

mc2.magic = function () {
  document.write("JavaScriptはここでも書き換えられる<br>");
}

mc2.magic();

//オブジェクトに最初のクラスを入れる
mc2 = new MyClass();
mc2.magic();

//規定クラス
function MyClass() {
  var obj = this;
  obj.classname1 = "N・ウィザード";
  obj.skill = "妖精の羽×6";
  obj.magic = function () {
    document.write("銀の魔法");
  }
}
//派生クラス
function MyClass2() {
  var obj = this;
  obj.classname2 = "スティルスナイパー";
  obj.weapon = "弓";
  MyClass.call(this);

  //オーバーライドによる書き換え
  obj.magic = function () {
    document.write("光の魔法<br>");
  }
}

このコードでは

MyClassには

・クラス変数 classname1
・クラス変数 skill
・クラスメソッド magic

とあります。

そこから

MyClass2にMyClassを継承したとき

・クラス変数 classname1
・クラス変数 skill
・クラス変数 classname2
・クラス変数 weapon
・クラスメソッド magic (ここだけ書き換えたい)

とメソッドmagicだけを新しくしたいと思うことがあるわけです。

そのときにオーバーライドという仕組みを使います

方法は簡単で

新しい同名のmagicというメソッドを新しいクラスにつくり
中身を書き換えるだけです。

すると、MyClass2を使ってオブジェクトを作ったときに
新しいmagicメソッドが呼ばれることになります。

このことも他のオブジェクト指向の言語に共通する部分です。

ただ、javascriptは特殊で同名のメソッドをいつでも書き換えられるようになっています。


また、今度は、もともとのMyClassを使いオブジェクトを入れ替えると
magicメソッドの内容は以前のものになります。

実行結果

コラム:

オーバーライドは規定クラスから、複数の派生クラスを作るときに有効です。

文字列の内容が
何のことか分からない方はスティフォレ小説を最後まで読むと分かると思います。

(C)著作権はふぇりあ16歳とお兄ちゃんにあります。
無断転載、盗用は禁止です。