オーバーロードとオーバーライドの違いをカンタン解説!【Java】
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やロジカルシンキングの概念を知るところから始めたのち、オブジェクト指向を学ばないと理解が難しいように思います。
まとめ
オーバーロードとオーバーライドは似たような名前で、同じ多態性(ポリモーフィズム)を実現する機能ですが、その働きは明確に異なるものです。しっかり理解して混乱しないようにしましょう・・・!