抽象クラス、インターフェース
抽象クラス
- キーワードは"abstract"
- 抽象メソッドは処理を書かない→"{}"を書かない、"()"の後はセミコロン
- 抽象クラスには抽象メソッドのみでなく、通常のメソッドも書ける
- 抽象クラスはインスタンス(←ニュアンスを後ほど修正)を作ることができない、抽象メソッドを実装したサブクラスをインスタンスする
- サブクラスはすべての抽象メソッドをオーバーライドしなければならない
- 抽象クラスはサブクラスを限定的にする
- 見た目は同じだが、インスタンスが異なるという実装ができる!
後ほど
インターフェース
- クラス名の前に"interface"としてクラスを宣言する
- 継承が単一継承だったのに対して、インターフェースは多重継承
- インターフェースはインスタンスを作ることができない
- インターフェースは配列は作ることができる、ただし要素の初期化は必ず実装クラス
- メソッドは必ず"public abstract"(抽象メソッド)、フィールドは必ず"public static final"(定数)
- 上記条件を満たさない場合は勝手に追加される
- クラス階層上無関係なクラスに共通メソッドを持たせることができる
- クラスとインターフェースの比較
クラス | インターフェース | |
---|---|---|
インスタンス | 作れる | 作れない |
メソッド | いろいろ | 必ずpublic static |
フィールド | いろいろ | 必ずpublic static final |
スーパークラス | 1つだけ | 持てない |
スーパーインターフェース | 複数指定可能(implements) | 複数指定可能(extends) |