iavaで抽象クラスを使用するメリット

java開発を行っていて、他のソースコードを参考に実装していましたが、
理解せずに使用しているのもあるため今回は抽象クラスについて調べてみました。

抽象クラスとは?

・一つ以上のメソッドが定義され、具体的な処理は実装しない
・クラスを継承し、サブクラスにてメソッドの具体的な処理を実装(オーバライド)する
・直接インスタンス化はできない

抽象クラスのメリット

・抽象クラスを継承することでメソッドを統一化できる
・メソッドの実装漏れやメソッド名の間違いがあればエラーが発生し、コーディングミスを未然に防ぐ
・複数人での開発を行う際に同じような機能で違うメソッド名が大量に発生しなくなる

実装例

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

抽象クラスには、1つ以上のメソッドが必要なため抽象メソッドを実装します。
抽象クラス、抽象メソッドの修飾子は"abstract"です。

//抽象クラスの宣言
abstract class Gundam{

//抽象メソッドの宣言
abstract void name();

}

抽象クラスを継承し、サブクラスを実装します。

class UnicornGundam extends Gundam{
void name() {
System.out.println("ユニコーンです");
}

}

class GundamSeed extends Gundam{
void name() {
System.out.println("シードです");
}

}

サブクラスをインスタンス化しメインの処理を実装します。

public class Main{
public static void main(String[] args){
UnicornGundam gundam1 = new UnicornGundam();
GundamSeed gundam2 = new GundamSeed();

Gundam[] gundamList = {gundam1, gundam2};
for(Gundam gundam : gundamList){
gundam.name();
}

}
}

gundamList配列に格納されている別々のサブクラスのインスタンスは、同じスーパークラスを使用しているため、上記のような実装が可能となります。



まとめ

例として挙げたものはかなり小規模なクラス、メソッドでした。
大規模開発になると、こういった抽象クラスを理解しておくことで、実装レベルの共通化が可能となります。
抽象クラスについてはまだまだ奥が深そうで、ポリモーフィズムといった概念があります。
今回の処理もポリモーフィズムです。
次回はポリモーフィズムについて深く取り上げていきたいと思います。

前へ

Laravel + Docker | Laravel Sailを使って開発環境を楽に構築する

次へ

PostmanでAPIテスト