Edited at

オブジェクト指向わかった気になっている?[ポリモーフィズム] java

More than 1 year has passed since last update.

はじめに

今回は意外と難解なポリモーフィズムについてまとめてみました




ポリモーフィズムとは



ざっくりいえば引数を受け取ったインスタンスがクラスによって違う振る舞いをすることです。

これじゃわかりませんね。

では今回もブラック会社(?)の社員を例にして解説していきましょう。

コード



java

public class Polymorphism {

public static void main(String[] args){

Worker pg = new Programmer("pg:");

Worker ne = new NetworkEngineer("ne:");

pg.work();

ne.work();

pg.working();

ne.working();

pg.finish_working();

ne.finish_working();

}

}

//仕事をする人のクラス

abstract class Worker{

String name;

Worker(String name){

this.name = name;

}

public void work(){

System.out.println(name+"業務を開始します");

}

public void finish_working(){

System.out.println(name+"業務を終了します");

}

abstract void working();

}

class Programmer extends Worker{

Programmer(String name){

super(name);

}

@Override

void working(){

System.out.println("業務内容:プログラミング");

}

}

class NetworkEngineer extends Worker{

NetworkEngineer(String name){

super(name);

}

@Override

void working(){

System.out.println("業務内容:休日出勤");

}

}






今回は前回紹介した抽象クラスを使用してポリモーフィズムを実装してみました。

特に注目すべきコードは以下の部分です

java

Worker pg = new Programmer();

Worker ne = new NetworkEngineer();



普段であれば別クラスに実装した機能を使うには継承するかそのクラスのインスタンスを定義して使用します。

ですが今回はWorkerの参照変数にprogrammerクラスのインスタンスを代入しています。

またWorkerの参照変数にNetworkEngineerクラスのインスタンスを代入しています。

つまりサブクラスのインスタンスをスーパークラスの参照変数に代入して使用しています。




でも、「なぜ」このような機能を実装する必要があるのでしょうか?




ポリモーフィズムの必要性



-ポリモーフィズムは一見使いどころが内容ですが、オブジェクト指向において重要な点があります。

+ポリモーフィズムは一見使いどころが無いようですが、オブジェクト指向において重要な点があります。

それは「共通のメソッドを呼び出すが、オブジェクトによってその機能を変化させる」という点です。

実はこの機能がないと各サブクラスのインスタンスを別々に生成しないといけません。




それはサブクラスの参照変数に別のサブクラスのインスタンスを代入できないからです




それがポリモーフィズムを実装することで、一つのスーパークラスの参照変数に他のサブクラスのインスタンスを代入できるので

統一した記述方法を使用しながら、それぞれのオーバーライドメソッドを呼び出すことができます




つまり、サブクラスごとに全く別の機能を実現可能になるという訳です