Javaのインターフェイス、リスコフの置換原則
インターフェイスとは
・定数とメソッドの宣言を集めたもの
・実行すべきことを抽象的に表すだけで、その具体的な方法は定めない
・型としての役割を果たす
クラスとインターフェイスの違い
・クラス継承は「extends」、インターフェイス実装は「implements」、インターフェイス継承は「extends」
・クラスは多重継承できないが、インターフェイスは複数実装、多重継承が可能
・インターフェイスは、「public static final」が付いた変数しか指定できない
抽象クラスとインターフェイス
抽象メソッドと「static final」な変数のみの抽象クラスは、インターフェイスに書き換えることができる
クラス/抽象クラス/インターフェイスの違い
・型としての役割 :クラス○、抽象クラス△、インターフェイス○
・構造と実装を提供 :クラス○(全部)、抽象クラス○(一部)、インターフェイス×
・インスタンス生成器:クラス○、抽象クラス×、インターフェイス×
インターフェイスの既定の修飾子でのコードのアクセス権
同じパッケージ内のコードだけがアクセスできる
インターフェイスにpublic修飾子を指定すると、どうなるか
ほかのパッケージ内のコードから参照できるようになる
インターフェイス変数の既定の修飾子
public、static、final(自動的に付加されるので指定する必要はない)
インターフェイスメソッドの既定の修飾子
public、abstract(省略できる)
リスコフの置換原則
・派生型はその基本型と置換できなければならない、という原則
・実装側と利用側に分けた場合、責任を実装側に置く
リスコフの置換原則を利用側と実装側で表現
・利用側:基本型を引数にとるメソッドには、どの派生型のインスタンスを渡したとしても、派生型の種類を気にしないで使える
・実装側:メソッド引数として渡ってきたインスタンスが、その派生型のインスタンスだったとしても、正常に動作することを保障しなければならない