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

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

前者が外部向けの設計図、後者が内部向けの設計図と表現されることが多い。

Javaで使われる用語だが、rubyにもインターフェースやダックタイピング、ポリモーフィズム等通ずるところが多いため、学習する価値はあると思う。

【詳解】抽象クラスとインタフェースを使いこなそう!! - Qiita

インターフェース

CAN DOの関係あるといえる。

テレビcan 音量調節、テレビcan 電源消し付け

継承先に対して、定義したものの実装を強制することができる

「Inputする値とOutputされる値が同じ」という規約がインターフェース。と認識している。

このインターフェースを継承させて多態性を作っていくと、ダックタイピングにつながってくる。

<aside> 💡 中(具体的な処理)は意識せず、外(他のクラス)から見てテレビが出来ることを定義する感じ

</aside>

インターフェース名には、作成したいインスタンス群を抽象的にした概念名をつけて、そのインターフェースを継承したインスタンスに保持しておいてほしいメソッドを、空のまま定義しておく。

ex)

テレビ(インターフェース)薄型テレビ(インスタンス)、ブラウン管(インスタンス

テレビに音量調節(メソッド)、電源消し付け(メソッド)、チャンネル切り替え(メソッド)といった空のメソッドを定義しておく。

抽象クラス

Is Aの関係にあると言える。

薄型テレビ is テレビ、ブラウン管 is テレビ

インターフェースと同様、継承先に対して、定義したものの実装を強制することができる。

継承されることを前提としてて作られているクラスなので、抽象クラスを直接インスタンス化させることはできない。

振る舞いの型(電源をオンオフする、音量調節する)を継承をし、具体的な処理を個性(属性、値)に合わせて上書き(オーバーライド)する。

インターフェースと抽象クラスの使い分け、活用方法 - Qiita

【Java入門】インターフェースとは?抽象クラス(abstract)との違い