Javaにおける継承とポリモーフィズムの主な違いは、継承ではクラスが既に存在するクラスのプロパティとメソッドを使用できるのに対し、ポリモーフィズムではオブジェクトが複数の振る舞いをすることができる点です。
オブジェクト指向プログラミング(OOP)は、ソフトウェア開発における一般的なプログラミングパラダイムです。
オブジェクトを使用して実世界のシナリオをモデル化するのに役立ちます。
Javaは、OOPをサポートするプログラミング言語です。
クラスは設計図であり、オブジェクトを作成するのに役立ちます。
クラスは属性と振る舞いを持っています。
属性はプロパティとも呼ばれ、ビヘイビアはメソッドとも呼ばれます。
OOPの2大柱は継承とポリモーフィズムです。
Javaにおける継承とは
Javaにおける継承とは、あるクラスが既に存在するクラスのプロパティや振る舞いを利用できるようにする仕組みのことです。
既存のクラスは親クラスまたはスーパークラスと呼ばれます。
そのプロパティやメソッドを継承する新しいクラスは、子クラスまたはサブクラスと呼ばれます。
継承の最大の利点は、コードの再利用が可能であることです。
プログラム例を以下に示します。
図1: クラスA
図2: クラスB
図3: クラステスト
クラスAはsumというメソッドを持ち、2つの値を足し算します。
BクラスはAクラスを継承しており、subというメソッドを持っています。
これは2つの値を引き算します。
テストクラスはmainメソッドを持っています。
クラスBはクラスAを継承しているので、クラスAのプロパティとメソッドを使用することができます。
Javaにおけるポリモーフィズムとは何か
Javaにおけるポリモーフィズムとは、オブジェクトがそのライフサイクルの異なる段階において異なる振る舞いをすることを指します。
ポリモーフィズムには、主にオーバーロードとオーバーライドの2種類があります。
オーバーロード
オーバーロードは、同じクラスやサブクラスで、同じ名前のメソッドを異なるパラメータで使用することを可能にします。
静的束縛」「コンパイル時多相性」とも呼ばれる。
プログラム例を以下に示します。
オーバーライドクラスには、sumと同じ名前のメソッドが2つあります。
5行目のsumメソッドはパラメータを取らない。
2つの値10と20を加算して、その結果である30を返します。
さらに、11行目のsumメソッドは、2つのパラメータを取得する。
その2つの値を足して、結果50を返しています。
objはmainメソッド内のオブジェクトです。
5行目でobj.sum()がsumメソッドを呼び、11行目でobj.sum(20,30)がsumメソッドを呼び出しています。
同じオブジェクトが、関連するメソッドを適宜呼び出しているのです。
したがって、同じオブジェクトでも状況に応じて異なる動作をすることになります。
オーバーライド
オーバーライドは、スーパークラスにすでに存在するメソッドに実装を提供することを可能にします。
レイトバインディング」「ダイナミックバインディング」「ランタイムポリモーフィズム」とも呼ばれる。
プログラム例を以下に示す。
図5:Vehicleクラス
図6:Carクラス
図7: Test クラス
Vehicleクラスはdisplayというメソッドを持っています。
CarクラスはVehicleクラスを継承し、独自の実装でdisplayというメソッドを持っています。
Vehicleはスーパークラスで、Carはサブクラスです。
Testクラスはmainメソッドを持っています。
c’はCar型のオブジェクトです。
displayメソッドを呼び出すと、Carクラスのdisplayメソッドの実装を見ることができます。
スーパークラスがdisplayメソッドを持っていても、サブクラスでdisplayメソッドがオーバーライドされています。
Javaにおける継承とポリモーフィズムの違い
定義
継承とは、新しいクラスがスーパークラスのプロパティやメソッドを使用できるようにする仕組みであり、ポリモーフィズムとは、オブジェクトが複数の振る舞いをする能力のことである。
したがって、これがJavaにおける継承とポリモーフィズムの主な違いです。
実装
また、継承の実装はクラスレベルで行われるのに対し、ポリモーフィズムの実装はメソッドレベルで行われます。
使用方法
また、継承がコードの再利用性をもたらすのに対して、ポリモーフィズムはコンパイル時や実行時に適宜メソッドを呼び出すことができる。
この点も、Javaにおける継承とポリモーフィズムの違いと言えるでしょう。
結論
OOPの大きな柱は、継承とポリモーフィズムの2つです。
Javaにおける継承とポリモーフィズムの主な違いは、継承では既存のクラスのプロパティやメソッドを利用できるのに対し、ポリモーフィズムではオブジェクトが複数の振る舞いをすることができる点です。