第10章 抽象クラスとインタフェース (Java)
抽象クラスとは
- クラス宣言にabstractキーワードを付けると抽象クラスになる。
- 処理定義がなく末尾にセミコロン(;)を付けたメソッドを抽象メソッドという
- サブクラスは抽象メソッドをオーバーライドして実装しなければならない。
- すべての抽象メソッドを実装しないサブクラスは抽象クラスにしなければならない。
- 抽象クラスはnewでオブジェクトを作成できない。
抽象クラス変数
- 抽象クラス変数を作成してサブクラスの参照を代入できる。
- 抽象クラス変数はオブジェクトの多態性を活用した処理を行うのに使われる。
- 抽象クラス変数でアクセスできるは抽象クラスで定義したメンバだけである。
サブクラスで新たに定義したメソッドやサブクラスでオーバーロードしたメソッドを実行することはできない。
インターフェースとは
- クラスに準ずる存在で、抽象メソッドを定数だけで参照を代入できる。
- new文でオブジェクトを作ることはできない。
- クラスを「継承する」と言うのに対して、インターフェースは実装するという。
- インタフェースには定数と抽象メソッドだけを定義できる。
- 定数には public static finalが自動的に付加される。
- メソッドには。 public abstractが自動的に付加される。
staticのついたメンバはクラスに1つだけ存在し、共有される。
final修飾子は「変更できない」という意味である。 - インタフェースファイル名も拡張子はjavaである。
- extendsで他の複数のインタフェースを拡張できる。
- インタフェースには次の様な意義がある。
外部のクラスとのインタフェース(公開仕様)を作れる。
多重継承と類似の使い方ができる。
多態性を利用するコードがかける。
インタでースの実装
- implementsキーワードを使って実装を宣言をする。
- implementsdeで1つのクラスに複数のインタフェースの実装を宣言できる。
- クラスの継承と併用できる。
- クラス継承図のなkでは、実装を破線で表す。
インタフェースの注意事項
- interface宣言には本来abstractが付くが宣言では省略してもよい。
- メソッドには本来 public abstractが付くが宣言では省略してもよい。
- 定数には本来 public static finalが付くが宣言では省略してもよい。
- extends で他のインタフェースを拡張したインタフェースを実装するときは、それらすべてのインタフェースを実装しなければならない。
インタフェース変数
- インタフェース変数を作成し、インタフェースを実装したオブジェクトの参照を代入できる。
- インタフェース変数でアクセスできるメソッドは、インタフェースで定義しているメソッドだけである。