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タッチタイプゲームとして遊ぶことができます。