特徴
クラスに適用した場合
* 継承させることが必須となる
* そのクラスは、インスタンス化できなくなる
メソッドに適用した場合
* そのメソッドは、オーバーライドが必須となる
* そのメソッドは、処理内容を記述できない
* そのメソッドのクラスにも、abstractの指定が必須となる
使いどころ
[1] インターフェイスを実装するクラスを複数作成したところ、
どのクラスにも共通の実装が必要なことが分かり、コードを共有化したい
[2] クラスが実装するべきインターフェイスは決まっていて、
一部については実装方法も決まっているが、全部の実装方法までは決まっていない
[3] 既存のクラスに、あるインターフェイスを実装することにして、基本クラスとして使いたい
# 結構、上記のことってあり得るよな...
* インターフェイスは、複数継承可能
* 抽象クラスは、1つしか継承できない
* インターフェイスは、抽象メソッドのみしか宣言できない
* 抽象クラスは、抽象メソッドと抽象メソッドでないメソッドの両方を宣言できる
サンプル
AbstractClass.java
abstract public class AbstractClass extends Thread {
abstract public void methodA() throws Exception;
@Override
public void run() {
try {
this.methodA();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
ChildClass.java
public class ChildClass extends AbstractClass {
@Override
public void methodA() throws Exception {
// 何らかの処理
}
}