Rainbow Planet

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

Javaのポリモフィズムのメリットや例をご紹介(サンプルプログラムあり)

投稿日:2020年12月26日 更新日:

<目次>

(1) Javaのポリモフィズムのメリットや例をご紹介
 (1-1) ポリモフィズムとは?
 (1-2) サンプルプログラム
 (1-3) ポリモフィズムのメリット
 (1-4) 参考:ポリモフィズムの種類について

(1) Javaのポリモフィズムのメリットや例をご紹介

(1-1) ポリモフィズムとは?

ポリモフィズムは「同じ操作でも、異なるオブジェクトに対して呼び出す場合、異なる挙動になる性質」です。
 
代表的な例が、あるスーパークラスを継承するサブクラスが複数ある場合に、同じメソッドであっても、サブクラスによってメソッドの実装内容が異なるために複数の挙動を示す、というものです。
(図111)

この図の例では、Fruitsというフルーツ全般を表すスーパークラスがあり、そのスーパークラスを継承する具体的なフルーツのクラス(リンゴ、レモン、メロン)があります。
 
それぞれのクラスには同じ名前のcolor()メソッドが定義されていますが、クラスによって実装が異なっています。
 
Fruitsオブジェクトの利用者は、Fruitsメソッドに定義されているcolor()メソッドを呼び出す事で、各フルーツのcolor()メソッドを呼び出す事ができます。この呼び出し結果は呼び出すフルーツによって異なる結果になります。
 

(1-2) サンプルプログラム

上記例をプログラムに落としたサンプルです。
(サンプルプログラム)
public class IT0209_Polymorphism {
    public static void main(String args[]) {
        //Furits型の配列を作成
        //この時、サブクラスのインスタンスはスーパークラス型に代入が可能
        Fruit[] fr = {new Apple("青森県"),new Lemon("広島県"),new Melon("茨城県")};
        for(int i=0; i<fr.length; i++) {
            //同じcolorメソッドだが、オブジェクト(Apple,Lemon,Melon)によって異なる挙動を示す
            fr[i].color();
        }
    }
}
//スーパークラス
class Fruit {
    public void color() {
        System.out.println("This is some kind of Fruits");
    }
}
//Fruitsのサブクラス#1
class Apple extends Fruit {
    private String origin;
    //コンストラクタ
    public Apple(String origin) {
        this.origin = origin;
    }
    //オーバーライド
    public void color() {
        System.out.println("This is an APPLE made in "+origin+" and the color is RED");
    }
}
//Fruitsのサブクラス#2
class Lemon extends Fruit {
    private String origin;
    //コンストラクタ
    public Lemon(String origin) {
        this.origin = origin;
    }
    //オーバーライド
    public void color() {
        System.out.println("This is an LEMON made in "+origin+" and the color is YELLO");
    }
}
//Fruitsのサブクラス#3
class Melon extends Fruit {
    private String origin;
    //コンストラクタ
    public Melon(String origin) {
        this.origin = origin;
    }
    //オーバーライド
    public void color() {
        System.out.println("This is an MELON made in "+origin+" and the color is GREEN");
    }
}

(図121)実行結果
7行目のforループでFruit型の配列をループして、各要素のcolorメソッドを呼び出しています。各要素のオブジェクトが異なり実装も違うので、違った結果になります。

目次にもどる

(1-3) ポリモフィズムのメリット

ポリモフィズムはいうなれば、メソッドを何度も再利用しているようなイメージです。
 
①効率性
仮に似た内容のクラスを複数作る場合に、もしスーパークラスがが十分にテストされて品質が担保されているならば、それを再利用する方が効率良くプログラミングできます。
 
②可読性
同じ名前に統一されるため、プログラムの可読性が向上します。
 

目次にもどる

(1-4) 参考:ポリモフィズムの種類について

今回は深くは触れませんが、ポリモフィズムには大きく分けて2つの種類があります。概要だけ簡単に紹介いたします。

①コンパイル時ポリモフィズム
メソッドのオーバーロードはコンパイル時に発生するため、「コンパイル時」ポリモフィズムと呼ばれています。
メソッドの「オーバーロード(OverLoad)」が該当します。オーバーロードは「同一クラス内に同じ名前のメソッドを複数定義すること」です。
 
②ランタイム時ポリモフィズム
メソッドのオーバーライドはランタイム時(=プログラム実行時)に起きるため「ランタイム時」のポリモフィズムと呼ばれています。
メソッドの「オーバーライド(OverRide)」が該当します。オーバーライドは「スーパークラスで定義しているメソッドをサブクラスで再定義すること」を言います。
 

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

GitHubのWebAPIをコールしてユーザー情報を取得するサンプルプログラムの解説+エラー対応も2例紹介

(0)目次&概説 (1) 目的  (1-1) 記事の目的 (2) APIの概要  (2-1) APIとは?  (2-2) Web APIとは?  (2-3) Web APIの様々な呼び方   (2-3 …

Javaで正規表現の使い方をご紹介+サンプルプログラム付き

<目次> (1) Javaで正規表現の使い方をご紹介  (1-1) 正規表現とは?  (1-2) Javaでの正規表現の使い方  (1-3) サンプルプログラム (1) Javaで正規表現の使い方をご …

Javaのswitch-case文の構文や使い方を紹介+UFOキャッチャーの座標移動プログラムも紹介

<目次> (1) Javaのswitch-case文の構文や使い方を紹介  (1-1) switch-caseの構文  (1-2) else-if文との比較 (2) サンプルプログラムの紹介  (2- …

木構造の探索における計算量の違いや木構造の種類について(B木/二分木/2-3探索木)

<目次> (1) 木構造の探索における計算量の違いや木構造の種類について(B木/二分木/2-3探索木)  (1-1) 木構造について  (1-2) 「B木」構造  (1-3) 「二分木」構造  (1- …

JSPとは?役割や基本文法およびHelloWorldのサンプルプログラムの紹介

(0)目次&概説 (1) JSPの基本  (1-1) JSPとは?  (1-2) JSPのHelloWorld (2) JSPの基本文法  (2-1) ディレクティブ  (2-2) アクションタグ   …

  • English (United States)
  • 日本語
Top