👳

抽象クラスのメリットがわかっていない

2021/09/22に公開

抽象クラスについてあまりわかっていなかったので自分なりにまとめてみた。
まとめるにあたっての背景。普段の業務ではRuby(RoR)を使っているため抽象クラスは使ってこなかったが、Javaを勉強するにあたって、どのようなものか?を理解していなかったため。

間違った理解をしていたらコメントください

抽象クラスとは

抽象メソッドを1つ以上持つクラス。自身だけでは意味をもたず、サブクラスに継承されることで初めて機能する

抽象クラスを宣言する(一般化)

// abstract修飾子をつけて宣言する
abstract class Class-Name {
	// 抽象メソッド
	abstract DataType Method-Name(args);
}

具体例

// 抽象クラス
abstract class AbstractClass {
	abstract void setText();
}

// 具象クラス(サブクラス)
class ConcreteClass extends AbstractClass {
	String text;

	@Override
  void setText(String text) {
		this.text = text
	}

	public static void main(String[] args) {
		ConcreteClass conc = new ConcreteClass();
		conc.setText("Hello, World");
		System.out.println(conc.text);
	}
}

抽象クラスの特徴

  1. 抽象クラスを継承したサブクラスは、抽象クラスにある抽象メソッドを実装する必要がある
  2. 抽象クラスはインスタンス化できない
  3. サブクラスでコンストラクタを記述しなければならない

抽象化する目的

仕様(インターフェース)と実装の分離と規定

抽象クラスでは抽象メソッドを宣言しどのようなメソッドを必要とするかを定義しておく。
抽象クラスを継承したサブクラスで抽象メソッドを実装する。
このようにしておくことで、仕様と実装を分離させた上で、サブクラスが持つべきメソッドを定めることができる。

Discussion