Edited at

社畜で抽象クラスをまとめてみた

More than 3 years have passed since last update.

はじめに

今回はあまりつかおうと思えない人の為に「抽象クラス」について

超ブラックな会社を題材にいろいろな社員と共に抽象クラスを実装しました

抽象クラス・抽象メソッド

そもそもこれらのクラスとメソッドは何?使い物になるの?

そういう人もいると思うので解説します。

まず抽象クラスとは…

・抽象メソッドを最低一つ含むクラス

の事です。

これだけじゃ全然わかりませんね。




では抽象メソッドとはなにか

・オーバーライドされることを前提に作成された処理とデータを持たないメソッド

の事です。

つまり抽象クラスと抽象メソッドは継承されて初めて本来の役割を果たすのです。



コード概要

最初にいったように今回はブラックな会社をモデルにコーディングしました

それと共に抽象クラス・メソッドのメリットとデメリットについて解説します。



「メリット」

・必ず実装させたい機能が複数のクラスにある場合、その実装と管理が容易になる

  →社員は同じように出社退社しますが仕事内容は違うため仕事内容を抽象メソッドとし、出社から退社までの流れを抽象クラスにまとめました。

   →つまり余計な処理(共通の処理など)をいちいちすべてのクラスに書き込む必要がなくなり、個別の処理を追加しやすくなります


「デメリット」

・抽象クラスは単体でインスタンスを作成できないので、使用時はかならず継承しないといけない

  →インスタンス不可は仕様です。

   →抽象クラスを継承した場合には抽象メソッドをオーバーライドしないとエラーになります

    →しかし継承したがまだ抽象メソッドがいらない場合などは継承先のクラスを抽象化すると解決します。

コード


public class abpractice {

public static void main(String[] args){
//ここに各社員の処理をまとめる
//以降は各社員を呼び出す
developer dev = new developer();
engineer se = new engineer();
manager pe = new manager();

dev.goCompany();
se.goCompany();
pe.goCompany();

System.out.println("\n");

dev.work();
se.work();
pe.work();

System.out.println("\n");

dev.backCompany();
se.backCompany();
pe.backCompany();

System.out.println("本日も無事業務を終了しました。");

}

}

//抽象クラスの処理をまとめる
abstract class Working_process{

protected String name;

//勤務内容は抽象メソッドとして定義
abstract void work();

//勤務以外は統一
void goCompany(){
System.out.println(name+"が出社しました");
}

void backCompany(){
System.out.println(name+"が退社しました");
}
}

//開発者クラス
class developer extends Working_process{

protected String name = "プログラマ";

public developer(){
super.name = name;
}

@Override
void work(){
System.out.println(name+"は社畜としてひたすらコーディングします");
}

}

//システムエンジニアクラス
class engineer extends Working_process{

protected String name = "SE";

public engineer(){
super.name = name;
}

@Override
void work(){
System.out.println(name +"は社畜プログラマをまとめます");
}
}

//プロジェクトマネージャークラス
class manager extends Working_process{

protected String name = "プロジェクトマネージャ";

public manager(){
super.name = name;
}

@Override
void work(){
System.out.println(name +"はプログラマやSEを管理しデスマと戦います");
}
}