基本的にはC++と同じか。(C++は多重継承ができるけどJavaはできません)
ルール
- abstract関数を含むクラスはabstractとして宣言しないといけない
- abstract関数は処理を実装しない
- クラスがabstractの場合、インスタンス化はできない
- abstractクラスを使用する場合、他のクラスから継承しないといけない
- abstractクラスを作ったら、他Concreteクラスから継承させ、そのクラスをインスタンス化させる
- 継承クラス側で継承元のabstractメソッドに実処理を記載する
- 基本的には継承側クラスで継承元のabstractメソッドに実処理を記載するが、全てのabstractメソッドを具体化しない場合には、その継承クラスもabstractクラスとなる
できること
- abstractクラスには中身のあるメンバ変数やコンストラクタ、メソッドを実装することができる
- interfaceは複数実装させることができる
- abstractクラス自身は複数のConcreteクラスで継承することができる
どういう時にabstractクラスを使う?
- 継承させるサブクラスがabstractのベースクラスと関連性が高い場合
よく比べられるInterfaceは?
- interfaceを使用するクラスたちはあまり関連が無い場合が多い
abstract class Test1 { //abstract class int legs = 0; abstract void print(); //abstract method } class Test2 extends Test1 { public void print() { System.out.println("Test"); } } public class program { public static void main(String[] args) { Test2 t = new Test2(); t.print(); } }