041-抽象クラス-抽象クラスの定義 【新人エンジニアが最初に覚えたい100のJava文法】

ユーチューブ動画

抽象クラスについて解説します。

ソースコード

abstract class Product {
	private String productName;
	private int price;
	public Product(String productName, int price) {
		this.productName = productName;
		this.price = price;
	}
	public abstract void showData();
}
class Printer extends Product {
	private int printSpeed;
	public Printer(String productName, int price, int printSpeed) {
		super(productName, price);
		this.printSpeed = printSpeed;
	}
	public void showData() {
		System.out.println(this.printSpeed);
	}
}
class Computer extends Product {
	private double clockFeq;
	public Computer(String productName, int price, double clockFeq) {
		super(productName, price);
		this.clockFeq = clockFeq;
	}
	public void showData() {
		System.out.println(this.clockFeq);
	}
}

解説

抽象クラスについて解説します。

以前の動画でクラスの継承関係について、解説しました。

継承関係では、共通の機能を持つクラスをスーパークラス、スーパークラスを利用する側のクラスをサブクラスと呼んでいました。

抽象クラスは、クラスの継承関係において、スーパークラス専用のクラスと明確に宣言したいときに利用します。

具体的には、abstractとつけると、このクラスからはインスタンスはできないよ、スーパークラスで利用してねという意味合いになります。

あくまでクラスの設計の概念を明確にするだけですから、プログラムに影響することはありません。

また、ご覧のメソッドのように、抽象クラスでは、抽象メソッドを宣言できます。

抽象メソッドは、オーバーライドする専用のメソッドです。

抽象クラスの中では、処理は書きません。

サブクラス側で処理を記述してくださいというように、こちらもその概念を明確にするための方法です。

なお、抽象メソッドでは、処理を記述しないので、セミコロンで終わります。

抽象メソッドが含まれる抽象クラスを継承したサブクラス、ここでは、PrinterクラスやComputerクラスでは、必ず抽象メソッドをオーバーライドしなければいけません。

ここでは、それぞれのクラスのメンバ変数を出力しています。

実行してみましょう。

インスタンスにご覧のようなデータを入れましたので、オーバーライドされたそれぞれのメソッドが働き、実行結果が表示されます。

どうして、このような結果になったのかという点については、次の動画で詳しく解説していますので、ぜひご覧ください。

このような抽象クラスや抽象メソッドをうまく利用することで、プログラマーに、設計の意図を守らせることができるようになります。

抽象クラスや抽象メソッドにはabstractをつけることを押さえておきましょう。

以上、抽象クラスについて解説しました。

このサンプルコードをJavaタッチタイプゲームとして遊ぶことができます。