未分類

オーバーライド

投稿日:

新しくメンバを付け加えるように、サブクラスを拡張してきました。サブクラスで新しくメソッドを記述するときには、

スーパークラスとまったく同じメソッド名・引数の数・型をもつメソッドを定義することができる

ようになっています。

すでに設計したCharacterクラスのshow()メソッドとサブクラスであるBeastCharaのshow()メソッドがまったく同じ引数の型・数・メソッド名を持っている場合はどうなるでしょうか?下記のコードを見てください。

show()メソッドを呼び出した結果、サブクラスのshow()メソッドが呼び出されていることがわかります。

このように、サブクラスのメソッドがスーパークラスのメンバにかわって機能することをオーバーライドと呼んでいます。

スーパークラスの変数でオブジェクトを扱う

サブクラスの変数を用意して、オブジェクトをさすようにしました。実は、サブクラスのオブジェクトはスーパークラスの変数で扱うこともできるようになっています。

実行結果からオーバーライドが行われていることがわかります。

オブジェクトをさす変数のクラスに関係なく、オブジェクト自身のクラスによって、適切なメソッドが呼び出される

ただし、サブクラスで新しく定義したメソッドをそのまま呼び出すことはできません。

オーバーライドの重要性を知る

上記のコードからスーパークラスの配列変数を使って、スーパークラスやサブクラスのオブジェクトを一緒に扱っています。

show()メソッドを定義することにより、配列で扱うオブジェクトがどのクラスのものであっても対応した処理が適切に行われることになります。

オーバーライドが行われることにより、スーパークラスとサブクラスのオブジェクトをまとめて扱えるようになっています。

1つのメソッド名がその状況に応じていろいろな働きをすることを、多態性(ポリモーフィズム)と呼びます

スーパークラスと同じ名前のメンバを使う

下記のコードを見てください。

サブクラス内でsuper.をつけてメソッドを呼ぶと、スーパークラスのメソッドの定義を利用して、サブクラスのメソッドを記述できます。

また、super.はフィールドにもつけることができます。スーパークラスの変数にアクセスしたい場合に、super.をつけます。

finalをつける

サブクラスによってオーバーライドされたくない場合は、メソッドの先頭にfinalをつけると、オーバーライドされないようにすることができます。

また、オーバーライドだけでなく、サブクラス自体を拡張したくない場合があります。この時は、クラスの先頭にfinalをつけておきましょう。

最後に、finalをフィールドの先頭につけた場合を見てみましょう。

フィールドに付けたfinalは、「フィールドの値を変更できません」という意味です。この決まった数をあらわすフィールドを、定数といいます。

  • メソッドにfinalをつけると、サブクラスでオーバーライドができなくなる。
  • フィールドにfinalをつけると、値を変更できなくなる。
  • クラスにfinalをつけると、クラスを拡張できなくなる。

すでに設計したクラスを継承すると、より効率的にプログラムを作成していくことができます。「継承」は、クラスの強力な機能のひとつです。

-未分類

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

サンプルイメージ

プログラミングの効率的な勉強法

やる前から苦手意識を持たない。答えは一つではない。 プログラミングはパソコンに対してこうしろと命令文を書いているだけです。 少し勉強しただけで、自分にはプログラミングに向いていないと諦めてしまう人がい …

サンプルイメージ

配列のしくみ①

プログラムの中ではたくさんのデータを扱う場合があります。例えば、50体のキャラクターの攻撃力や体力や属性を扱うプログラムを考えてみましょう。 たくさんの変数が登場するので、コードが複雑で読みにくくなり …

サンプルイメージ

メソッドのオーバーロード

           前の節ではクラスの「カプセル化」機能を学びました。クラスでは、 同じクラスの中に、同じ名前を持つメソッドを2つ以上定義する ということができます。 このクラスには、「setCha …

サンプルイメージ

for文のしくみを知る

激レアキャラをゲットするまでは・・・→レアガチャを引き続ける 私たちの生活に朝起きる、歯を磨く、朝食を食べる、学校に行く・・・といった「繰り返し処理」を行っています。 Javaでは、このような繰り返し …

サンプルイメージ

練習問題(for)解答例

以下に問題の解答例を記述します。 いかがでしょうか。多くの人は文法は理解できたが、それをどこでどのように使えばいいのかわからないと思っている人がほとんどでしょう。 何かを作成するまで処理の流れや組み合 …