【java】オーバーロードとオーバーライドの違いとは

エンジニア

※本記事は作成日より一年以上が経過しています。最新の情報ではないので、ご注意ください。

読了の目安時間: 247

javaのオーバーロードとオーバーライドは共に多態性(ポリモーフィズム)を実現する機能です。しかし、似たような名前で、初めて聞くと混乱しがちです。しっかり区別しましょう。

javaのオーバーロードとオーバーライドの違いとは

オーバーロードとは

オーバーロードとは、「同じ名前の複数のメソッドを同じクラス内に定義しておくこと」です。たとえばクラス内のコンストラクタにおいて、下記のような記述をしたものがオーバーロードに該当します。



class Human{

      public Human(){
        age = 0;
        System.out.println("人間のコンストラクタを作成しました。");
      }

      public Human(int s){
        age = s;
        System.out.println("人間のコンストラクタを作成しました。");
      }

}

一つ目のコンストラクタは引数を持たず、二つ目のコンストラクタは引数「int s」を持っています。しかし、どちらのコンストラクタも同じメソッド名となっています。このHumanコンストラクタを用いる時、引数を用いずに呼び出せば一つ目、引数を与えて呼び出せば二つ目が動作します。これがオーバーロードの働きです。ポイントは引数です。そのため、オーバーロードでは、「必ず各メソッドの引数の型・個数が異なるようにすること」が求められます。

オーバーライドとは

オーバーライドを知るためには、スーパークラスとサブクラス、継承のことを知る必要があります。スーパークラスから継承したクラスをサブクラスと呼びますが、サブクラスは、継承元のスーパークラスと「まったく同じメソッド名・引数の数・型を持つメソッドを定義」できます。そして、スーパークラスとサブクラスの同一メソッドを起動させると、「サブクラス側」のほうが優先して動作します。この働きを「オーバーライド」と呼びます。オーバーライドは、継承以外にも、抽象クラスやインターフェイスにも利用される機能です。

▼詳しくは、こちらのサイト様で。(とても分かりやすく記載されています。)
http://nobuo-create.net/java-beginner-26/

多態性(ポリモーフィズム)とは

繰り返しになりますが、オーバーロードもオーバーライドも多態性(ポリモーフィズム)の概念を実現する機能です。多態性(ポリモーフィズム)とは、同名のメソッドや型などをオブジェクトの種類に応じて使い分けることができる性質のことで、「実行される処理の実体が、コールされたメッセージではなく、メッセージを受けたオブジェクトによって決定される性質」ということです。

ぶっちゃけ、多態性(ポリモーフィズム)が分からなくてもプログラムは作成できてしまいますが、大規模開発などをする際、その設計をする人間が多態性(ポリモーフィズム)のことを理解していないと、開発は極めて困難となってしまいます。

個人的には、多態性(ポリモーフィズム)のメリットを受けるためには、MECEやロジカルシンキングの概念を知るところから始めたのち、オブジェクト指向を学ばないと理解が難しいように思います。

まとめ

オーバーロードとオーバーライドは似たような名前で、同じ多態性(ポリモーフィズム)を実現する機能ですが、その働きは明確に異なるものです。しっかり理解して混乱しないようにしましょう・・・!

最後に一言

いつもオーラロードが開かれたことを連想してしまう。

本記事を気に入って頂けたら、facebookの「いいね!」を是非!

【java】オーバーロードとオーバーライドの違いとは


本記事のシェアはこちらから!

  • このエントリーをはてなブックマークに追加
  • Pocket

PROFILE

yoshi

follow us in feedly

本ブログ・WebMakeBlog KIYOTATSUを運営しているYoshiと申します。PVは月間10万程度です。普段はWEB制作をやっています。過去、エンジニアの頃は、MATLAB/simulink/VBA/C/C++など扱っていました。生産管理、MECE、オブジェクト指向など、当時に得た知識はweb業界に入っても、かなり役立っています。