🎯
【Java】クラス解説34・抽象クラス
抽象クラス
- 抽象クラスとは、クラス名の前に
abstract
を付けたインスタンス化できないクラスを指します。
主にスーパークラスで使う事が多いです。スーパークラスは、共通のアクションや機能を実装し、サブクラスに具体的な実装を任せるためです。 - 抽象クラスで定義されたフィールドやメソッドは、サブクラスのインスタンスから参照することが可能です。
抽象クラスのコード例
import java.util.*;
public class Main {
public static void main(String[] args) {
// 抽象クラスのインスタンスの生成
Fuzi fz = new Fuzi();
}
}
// 抽象クラス(スーパークラス)
abstract class Fuzi {
}
// サブクラス
class Sakura extends Fuzi {
}
このコードを実行すると、下記のエラーメッセージが出てきますので、抽象クラスがインスタンス化できないことが分かります。
Main.java:6: error: Fuzi is abstract; cannot be instantiated
Fuzi fz = new Fuzi();
^
1 error
サブクラスのインスタンスから抽象クラスにアクセスするコード例
import java.util.*;
public class Main {
public static void main(String[] args) {
// サブクラスのインスタンスの生成
Sakura sk = new Sakura();
// ポリモーフィズム
sk.printNum();
}
}
// 抽象クラス(スーパークラス)
abstract class Fuzi {
// フィールド
public int num;
// コンストラクタ
public Fuzi(int num) {
this.num = num;
}
// メソッド
public void printNum() {
System.out.println(num);
}
}
// サブクラス
class Sakura extends Fuzi {
// コンストラクタ
public Sakura() {
// スーパークラスのコンストラクタを呼び出して、フィールド num を初期化
super(39);
}
// printNumメソッドのオーバーライド
public void printNum() {
System.out.println("サブクラス: " + num);
}
}
出力結果
サブクラス: 39
出力結果より、下記のことが分かります。
- サブクラスのインスタンスから抽象クラスのフィールドにアクセスできたことが分かります。
- サブクラスのインスタンス生成により、
- サブクラスのコンストラクタが呼び出されて、
-
super()
により、スーパークラスのコンストラクタを呼び出します。 - 引数として渡された
39
が、this.num
により、スーパークラスのフィールドnum
に代入されます。
- サブクラスのインスタンスから抽象クラスのメソッドにアクセスできたことが分かります。
- サブクラスのインスタンスから
printNum
メソッドを呼び出して、 - スーパークラスの
printNum
メソッドをオーバーライドしたサブクラスのprintNum
メソッドが実行されます。
- サブクラスのインスタンスから
Discussion