Javaのインターフェイス、リスコフの置換原則

インターフェイスとは

・定数とメソッドの宣言を集めたもの
・実行すべきことを抽象的に表すだけで、その具体的な方法は定めない
・型としての役割を果たす

クラスとインターフェイスの違い

・クラス継承は「extends」、インターフェイス実装は「implements」、インターフェイス継承は「extends」
・クラスは多重継承できないが、インターフェイスは複数実装、多重継承が可能
・インターフェイスは、「public static final」が付いた変数しか指定できない

抽象クラスとインターフェイス

抽象メソッドと「static final」な変数のみの抽象クラスは、インターフェイスに書き換えることができる

クラス/抽象クラス/インターフェイスの違い

・型としての役割  :クラス○、抽象クラス△、インターフェイス○
・構造と実装を提供 :クラス○(全部)、抽象クラス○(一部)、インターフェイス×
・インスタンス生成器:クラス○、抽象クラス×、インターフェイス×

インターフェイスの既定の修飾子でのコードのアクセス権

同じパッケージ内のコードだけがアクセスできる

インターフェイスにpublic修飾子を指定すると、どうなるか

ほかのパッケージ内のコードから参照できるようになる

インターフェイス変数の既定の修飾子

public、static、final(自動的に付加されるので指定する必要はない)

インターフェイスメソッドの既定の修飾子

public、abstract(省略できる)

リスコフの置換原則

・派生型はその基本型と置換できなければならない、という原則
・実装側と利用側に分けた場合、責任を実装側に置く

リスコフの置換原則を利用側と実装側で表現

・利用側:基本型を引数にとるメソッドには、どの派生型のインスタンスを渡したとしても、派生型の種類を気にしないで使える
・実装側:メソッド引数として渡ってきたインスタンスが、その派生型のインスタンスだったとしても、正常に動作することを保障しなければならない