【Java入門】ポリモーフィズムを詳しく解説します。

新米太郎
新米太郎

皆さんこんにちは新米です。

今回はJavaのポリモーフィズムについて詳しく解説していきたいと思います。

ポリモーフィズムは今後javaを使った開発では、絶対に欠かせない重要な知識となります。

またJava言語以外のオブジェクト言語でもポリモーフィズムはよく使われますのでこの機会に覚えましょう!

 

新米太郎
新米太郎

ポリモーフィズムってなんですか?

新米先生
新米先生

ポリモーフィズムはオブジェクト指向の一つです。これから詳しく解説していきますね!

新米太郎
新米太郎

よろしくお願いします。

そもそもポリモーフィズムとは?

ポリモーフィズムはオブジェクト指向の1つですが、オブジェクト指向と言われても抽象的で難しいですよね💦

初めは理解できなくて大丈夫です。オブジェクト指向は以下の3つを表しますので、1つずつ学習し知識を深めていきましょう!

オブジェクト指向三大要素

・継承
・カプセル化
・ポリモーフィズム ←今回はポリモーフィズムのみ学びます。

 

ポリモーフィズムとは、共通のインタフェースをもつ操作でも実際には、オブジェクトごとに振る舞いや動作が異なることをポリモーフィズム(多能性、多様性)と言います。

同じ名前のメソッドでもクラスによって振る舞いや動作が異なることです。

 

新米先生
新米先生

でも、これだけじゃあまりピンとこないと思うので具体例を上げたいと思います。

新米太郎
新米太郎

よろしくお願いします。

例えば、上記のイラストのように「鳴く」という共通の操作は同じでも

犬なら「ワン」猫なら「ニャー」猿なら「ウキー」など鳴き声はそれぞれ異なりますよね!

このような多様性のことをポリモーフィズムと言います。

つまり、中に入るものによって同じクラスでも違う処理を行うということです!

 

ではポリモーフィズムを利用するメリットはなんでしょう?

次にポリモーフィズムのメリットについて紹介します。

ポリモーフィズムのメリット

実際にポリモーフィズムを使用しなくてもプログラミングを行うことは可能です。

しかしポリモーフィズムを使うのは以下のメリットがある為です。

・コードの短縮化
・プログラムの手直しが効く

コードの短縮化

ポリモーフィズムを利用しない時と比較してみましょう。

■利用しない時

猫クラス 猫クラスのインスタンス = new 猫クラス();
猫クラスのインスタンス. 猫の鳴き声();
犬クラス 犬クラスのインスタンス = new 犬クラス();
犬クラスのインスタンス.犬の鳴き声();
猿クラス 猿クラスのインスタンス = new 猿クラス();
猿クラスのインスタンス.猿の鳴き声();

 

新米太郎
新米太郎

それぞれのクラスをインスタンス化しないといけないなんて面倒です💦

■利用した時

動物クラス 配列 = {new 猫クラス(),new 犬クラス(),new猿クラス()};
for (動物クラス 変数 :配列) {
変数.鳴き声();
}

同じ処理内容でもポリモーフィズムを用いた方がコードが短く見やすくなることがわかります。

プログラムの手直しが聞く

例えば、先ほどのコードに「アヒル」クラスを追加したい場合

ポリモーフィズムを使用したコードは

new アヒルクラス(),

と配列に追加するだけで良いです。

 

しかし利用しない場合だと

アヒルクラス アヒルクラスのインスタンス = new アヒルクラス();
アヒルクラスのインスタンス.アヒルの鳴き声();

このように長いコードを書かなくてはいけません。

今回は単純なコードなのでそれ程、困らないかもしれませんが、大きな開発になっていくと
「機能の追加」・「機能の修正」が困難になってきます。

新米太郎
新米太郎

何十行も似たようなコードを書く場合はポリモーフィズムを

使用しないと面倒ですね。

実際にコードを書いてみよう

[サンプルコード]
public class Main {
    public static void main(String[] args) throws Exception {
        Programing[] prog =  {new Programing(),new Java(), new Python(), new Swift()};

    for (Programing p : prog) {
      p.character();
    }
  }
}
class Programing {
  public void character() { System.out.println("以下の言語はバックエンド言語です。"); }
}
class Java extends Programing {
  @Override
  public void character() { System.out.println("人気言語Java"); }
}
class Python extends Programing {
  @Override
  public void character() { System.out.println("人工知能が作れるPython"); }
}
class Swift extends Programing{
  @Override
  public void character() { System.out.println("IOSアプリならSwift"); }
}

実行結果

以下の言語はバックエンド言語です。
人気言語Java
人工知能が作れるPython
IOSアプリならSwift

コードの解説

3行目で定義した配列を元に、10〜24行目のクラスをそれぞれfor文で呼び出しています。

メソッドの共通(オーバーライド)をすることでfor内の処理も今回の場合1行ですみます。

このように、ポリモーフィズムを実現する場合は、オーバーライドとオーバーロードが存在します。

まとめ

いかがだったでしょうか。

今回はJavaのポリモーフィズムについて解説しました。
Javaは金融やインフラ系の大きな開発に適した言語で、よくポリモーフィズムも使われます。

まずは先程のサンプルコードのように簡単なコードを書いてポリモーフィズムの仕組みを理解していきましょう!

コメント

  1. […] ・継承 ・カプセル化 ←今回はカプセル化のみ学びます。 ・ポリモーフィズム  […]

  2. […] ・ポリモーフィズム […]

タイトルとURLをコピーしました