Java クラス オーバーライドとオーバーロード の違い

今回はプログラミング言語Javaに関する、
オーバーライドとオーバーロードについて書き溜めます。

オーバーライドとオーバーロードは「多態性」にも関連するため、
オブジェクト指向プログラミングを学ぶ上でも役立つ概念なので
情報機科学初心者のマイルストーンとして残しておく。

概要

広告

まとめ

Override=上書き定義, Overload=多重定義
  • オーバーライドは、スーパークラスのフィールドやメソッド(同シグニチャ)を上書きして独自の定義すること
  • オーバーロードは、同じクラス内のメソッド(別シグニチャ)を定義すること

Java Override (オーバーライド=上書き定義) とは

まず、Wikipediaを参照するとオーバーライドを下記のように定義している。

オブジェクト指向プログラミングにおいてオーバーライド (override) とは、
スーパークラスで定義されたメソッドをサブクラスで定義し直し、動作を上書き(変更)することである。

オーバーライドの目的は、
「情報の隠蔽」である。
フィールドをオーバーライドすることで、
上位クラスで宣言されているフィールドと同じ型、同じ名前のフィールドを宣言すると
上位クラスの該当フィールドは直接見えなくなる。

メソッドをオーバーライドする場合、同じメソッドかつ同じシグニチャであることに注意すること。
違うシグニチャの場合、次に説明するオーバーロード(多重定義)になる可能性がある。

Javaにおいてオーバーライドする際に、「@Override」キーワードを付与すると
コンパイラによるチェックが走るため付与しておいた方がよい。

オーバーライドは多態性で利用される。

Java Overload (オーバーロード=多重定義) とは

まず、Wikipediaを参照するとオーバーロードを下記のように定義している。

多重定義 (たじゅうていぎ) あるいは オーバーロード (英: overload) とは、プログラミング言語において同一の名前(シンボル)を持つ関数あるいはメソッドおよび同一の演算子記号について複数定義し、利用時にプログラムの文脈に応じて選択することで複数の動作を行わせる仕組みである。

つまり、メソッド名は同じだが、引数が違うことで別の動作を実現することである。
例えば、abs() というメソッド名で、double abs(double), int abs(int)といった形で複数定義することを
オーバーロードと呼ぶ。



「多態性」「情報隠蔽」についてもいずれ別記事でまとめるが、
今回は、オーバーライドとオーバーロードについてイメージだけでもして貰えれば幸いである。



じゃあね〜〜〜〜。