おつかれさまです。
プログラミング初心者です。
いままでなんとなく通り過ぎていた単語を振り返ってみて
理解に詰まったもの、気になったものを少し投稿したいとおもいます。
「インターフェース」ってなんだろうと疑問に思われる方の参考になれば幸いです。
1.インターフェースとは
非常にわかりやすく言うのであれば
#####「このクラスは、**メソッド(≒関数)を持ちます!」という「約束」「規格」となります。
例をあげましょう。
例えばコントロールパネル(controlPanel)というインターフェースがあったとします。
このコントロールパネルには、「再生」「停止」「早送り」というメソッドがあるとします。
このcontrolPanelをimplementした場合には
#####必ずそのクラスには「再生」「停止」「早送り」が実装されていなければなりません。
#####実装されてなければエラーを起こしますという制約にもなるのです。
下記にわかりやすい図がありますのでもしよろしければ参考ください。
参考文献:
https://www.gixo.jp/blog/5159/
##2.具体的になに?
まとめると「この機能実装することをお約束します」という宣言
と思うと良いでしょう。
##3.用途、便利な使いかた
私はこれを読んで、先に宣言しちゃって大丈夫?
機能の拡張しにくいんじゃない?
と思ってました。
新しくわかりやすい例をもってきました。
- コンセントの規格が決まり、電化製品は基本的にはその規格に沿ったコンセントを作る必要があることになった(インターフェース)
- ドライヤーを作った
- 電子レンジを作った
- 冷蔵庫を作った
- テレビが発明された
ここで上記の家電製品のコンセントの形が全て統一されていれば、全て同じ電源タップが使えますね。変換機を買ってきたり、工事をしてコンセントの形を変えたりなどということは不要になります。
逆に言えば、家電製品の開発者は「コンセントの形を統一する必要性に迫られる」ということになりますが、それがインターフェースの本質です。
引用元:
https://teratail.com/questions/70213
上記のように未来のことを考えると、
「このような規格で作ってね」と宣言する
メリットが非常にわかりやすいのではないでしょうか。
もし規格が異なっていれば、ユーザビリティとして非常に好ましくない結果が想定されますゆえ・・・。
##3.extendとの違いは?
さて、ここでextendについても触れたいと思います。
例えばこんなpersonクラスがあるとします。
class Person {
String name;
eat(){}
```
このpersonクラスを継承して、Programmerクラスを作ります。
あるクラスを継承したクラスを作るには、クラス名の後ろに
extends クラス名
を付けるだけです。
```java
class Programmer extends Person {
Programming(){}
}
```
こちらは「継承」と呼ばれる親クラスの使用になります。
インプルメントはインターフェースの利用に対し、こちらは
**親のメソッド**を拡張して使用します。
例えば、親のメソッドで使用している値や動きを使いたい場合、
わざわざもう一度親メソッドの動きを再現する必要なく
呼び出す(継承する)ことで使用することができます。
ここはインターフェースとの違うところなのでご注意ください。
いかがでしたでしょうか。
インターフェースの理解の参考になれば幸いです。