Java

【Java】オーバーライド【メソッドの上書き】

Javaのオーバーライドについて説明します。

オーバーライドとは

メソッドを上書きすること

オーバーライドとは、メソッドを上書きすること。

オブジェクト指向プログラミング(OOP)の三大要素の内、継承に深く関係する。
ざっくり言うと、継承関係があるとき、子クラス(サブクラス)は親クラス(スーパークラス)で定義しているメソッドをそのまま使うこともできるし、上書きこともできる。ここで言っている「上書きこともできる」ことを「オーバーライド」という。
上書きの他に、「再定義」と表現する場合もある。

条件

下記すべてを満たすことである。

親クラスで定義しているメソッドとの関係において

  • メソッド名が一致すること
  • 引数が一致すること
  • 戻り値の型が一致すること
「引数が一致する」とは、引数の数とそれぞれの型が(順番含め)一致することをいう。
親クラスのメソッドにfinal修飾子がついている場合、オーバーライドできない点に注意(オーバーライドは継承が前提となるところ、そもそも継承できない為)

使い方

構文

定義

繰り返しになるが、親クラスと同名のメソッド名、引数、戻り値である必要がある。完全に一致しなければ、オーバーライドにならない(上書きではなく、追加になる)

実装例

コード

Main.java

FlyingFish.java

Fish.java

 

実行結果

前提として、「FlyingFish」というトビウオクラスは、「Fish」という魚クラスを継承している。魚クラスは泳ぐことができ、体の色を示すプロパティを持ってる。トビウオクラスは、魚クラスにできることは一通りでき、加えてglide(滑空)することができる。
Mainクラス内で、FlyingFishクラスのインスタンスを生成。FlyingFishクラス内でswimメソッドを定義しているが、継承しているFishクラスのメンバ(swim())とメソッド名・引数・戻り値すべて一致していて、オーバーライドしている。その為、Mainクラス内でFlyingFishクラスのswimを呼び出した際、(FlyingFishが継承しているFishクラスの)「ゆうゆうと泳ぐ」ではなく(FlyingFishクラスでswim()をオーバーライドして)「早々と泳ぐ」の方が出力されていることが解る。

参照

『スッキリわかるJava入門』(中山清喬)

主な参照:「第11.1 継承の基礎」(p.415等)
ダイス
ダイス
ご参考になれば幸いです。
ABOUT ME
ダイス
アラサーSE(20代)。 主な経験は、PGとしてJava(SpringBoot)、C、PHP(Laravel)、VBAがある。SS、UTの経験有り。最近はUI工程を経験中。 IT業界だけでなく、教育業界(予備校での運営スタッフ)での経験有り。 サイトでは、特定の分野に限定せずに幅広く発信していきます。

COMMENT

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