\r\n\r\n
オブジェクト指向プログラミング(OOP)は、ソフトウェア開発における主要なパラダイムである。クラスとオブジェクトを使ってプログラムを設計するアプローチです。クラスは設計図である。オブジェクトに含まれるべきものを記述する。または、オブジェクトのプロパティを定義する必要があります。このように、オブジェクトはクラスのインスタンスです。これらのオブジェクトは、他のオブジェクトと通信します。OOPの主要な概念の1つはポリモーフィズムです。オブジェクトが複数の振る舞いをする能力のことである。ポリモーフィズムはオーバーロードとオーバーライドの2つに分けられる。Javaにおけるオーバーロードとオーバーライドの主な違いは、オーバーロードは同じ名前のメソッドを異なる実装で複数作成する機能、オーバーライドはスーパークラスに既に存在するサブクラスのメソッドに実装を提供する機能であることです。
1. 概要と主な違い 2. Javaにおけるオーバーロードとは 3. Javaにおける上書きとは 4. Javaにおけるオーバーロードと上書きの類似点 5. 横並びの比較 - 表形式でのJavaにおけるオーバーロードと上書き 6. まとめ
オーバーロードとは、同じ名前のメソッドを異なる実装で複数作成する機能で、以下のJavaのコードを参照してください。
図01:パラメータのオーバーロード数の使い分けを説明するJavaプログラム
上のプログラムによると、クラスAには同じ名前のメソッドが2つあります。最初のsumメソッドは2つの引数を持つ。2番目のsumメソッドは3つの引数を持つ。A型のオブジェクトを生成してsum(2,3)を呼び出すと、2つの引数を持つsumメソッドsum(inta, intb)を呼び出して5を返す。 A型のオブジェクトを生成してsum(2,3,4)を呼び出すと、3つの引数を持つ他のsumメソッド sum(inta, intb, intc) を呼び出して9を返してくれる。
メソッドは同じ名前ですが、パラメータの数が異なります。同じオブジェクトでも異なる挙動が観察されることがあります。この考え方をオーバーロードといいます。静的バインディング、コンパイル時ポリモーフィズムとも呼ばれる。
また、異なるデータ型でオーバーロードすることも可能です。以下のJavaコードを参照してください。
図02は、Javaプログラムのオーバーロード量の違いについて説明したものです。
上のプログラムでは、sum (inta, intb) メソッドは2つの整数値を取り、sum (double a double b) メソッドは2つの2倍値値を取るという、同じ名前の2つのメソッドで構成されています。A型のオブジェクトを作成してsum(2,3)を呼び出すと、sum(inta, intb)を呼び出して値5を返す。sum(3.4, 5.6) を呼び出すと、sum(double a double b) を呼び出して値 9.0 を返してくれる。この例では、メソッドは同じ名前だが変数の型が異なっている。これもオーバーロードです。
Javaでは、既に存在するクラスを使ってサブクラスを作ることができる。新しいクラスを一から作るのではなく、既に存在するクラスのプロパティやメソッドを利用することが可能です。既存のクラスはスーパークラスで、派生クラスはサブクラスです。サブクラスが、すでにスーパークラスにあるメソッドの実装を提供することを、上書きといいます。以下のJavaプログラムをご覧ください。
図03:書き直されたJavaプログラム
上記のプログラムによると、クラスAはdisplay()メソッドを持っています。クラスBはクラスAから拡張されているので、クラスBはクラスAのプロパティとメソッドにアクセスすることができます。クラスBは、特定の実装を持つメソッドdisplay()を持ちます。クラスAにdisplayメソッドがあっても、クラスBのdisplayメソッドでオーバーライドされるため、クラスAのオブジェクトを生成してdisplayメソッドを呼び出すと、出力はBになる。サブクラスは、スーパークラスに既に存在するメソッドを実装しています。
この概念はオーバーライドとして知られるポリモーフィズムの一種である。また、レイトバインディング、ダイナミックバインディング、ランタイムポリモーフィズムとも呼ばれる。
Javaでのオーバーロード vs. Javaでのオーバーロード | |
Javaにおけるオーバーロードとは、同じ名前のメソッドを異なる実装で複数作成する機能です。 | Javaにおけるオーバーライドとは、スーパークラスに既に存在するメソッドに対して、サブクラスのメソッドで特定の実装を提供することです。 |
パラメータ | |
オーバーロードでは、同じ名前のメソッドであっても、パラメータの数が異なったり、パラメータの種類が異なったりします。 | 書き換えでは、メソッドは同じ名前を持ち、パラメータも同じでなければならない。 |
トピックス | |
オーバーロードはクラス内で発生します。 | 継承関係を持つ2つのクラスで上書きは発生する。 |
同義語 | |
オーバーロードはコンパイル時ポリモーフィズムと呼ばれます。 | 書き換えることをランタイムポリモーフィズムといいます。 |
ポリモーフィズムは、オブジェクト指向プログラミングの重要な概念である。オブジェクトが複数の振る舞いをする機能を提供します。これは、オーバーロードでもオーバーライドでも構いません。オーバーロードはコンパイル時多相性、書き換えは実行時多相性である。ソフトウェア・アプリケーションの開発に役立つ。オーバーロードとの違いは、オーバーロードは同名のメソッドを異なる実装で複数作成する機能、オーバーライティングはスーパークラスに既に存在するメソッドに対して、サブクラスのメソッドで特定の実装を提供する機能であることです。オーバーロードとオーバーライドは、Javaで実装することができます。
本記事のPDF版をダウンロードし、オフラインで使用する場合は、引用の指示に従ってください。PDF版のダウンロードはこちらJavaにおけるオーバーロードと上書きの違いについて