Help us understand the problem. What is going on with this article?

オブジェクト指向わかった気になっている?[ポリモーフィズム] 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クラスのインスタンスを代入しています。
つまりサブクラスのインスタンスをスーパークラスの参照変数に代入して使用しています。


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


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


-ポリモーフィズムは一見使いどころが内容ですが、オブジェクト指向において重要な点があります。
+ポリモーフィズムは一見使いどころが無いようですが、オブジェクト指向において重要な点があります。
それは「共通のメソッドを呼び出すが、オブジェクトによってその機能を変化させる」という点です。
実はこの機能がないと各サブクラスのインスタンスを別々に生成しないといけません。


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


それがポリモーフィズムを実装することで、一つのスーパークラスの参照変数に他のサブクラスのインスタンスを代入できるので
統一した記述方法を使用しながら、それぞれのオーバーライドメソッドを呼び出すことができます


つまり、サブクラスごとに全く別の機能を実現可能になるという訳です
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした