入社して2年経ち、今更ですが資格の勉強に意識が向いてきたので、JavaSE Bronzeの学習に取り組み始めました。
定着のためのアウトプットの場として、書かせていただきます。
認識違いが多々あると思いますので、若い子がなんとやっとるわぁくらいの感覚で読んでいただければと思います。
インターフェースとは
Javaプログラミング言語のインターフェースは、クラスが実装しなければならない動作を指定するために使用される抽象型です。それらはプロトコルに似ています。インターフェイスは、インターフェイス キーワードを使用して宣言され、メソッド シグネチャと定数宣言のみを含むことができます。
https://en.wikipedia.org/wiki/Interface_(Java)
んんん、難しい。
もっと噛み砕いた解説を見てみると
Javaで使われるインターフェースとは、クラスに含まれるメソッドの具体的な処理内容を記述せず、変数とメソッドの型のみを定義したものです。以下のようにインターフェースを宣言および実装を行います。
https://www.internetacademy.jp/it/programming/java/difference-between-interface-and-abstract.html
なんとなくイメージが沸いてきました。テンプレートとかルールのようなものかな・・?
民主主義というインターフェースには、選挙というメソッドが実装されていて
各国によって選挙の方法が違う。日本だと比例代表制と小選挙区制があるみたいな・・・??
インターフェースの記述の仕方
interface Animal{
String NAME = "タマ";
void eat();
}
class Cat implements Animal{
public void eat() {
System.out.println(NAME + "はチュールを食べる");
}
}
//実行
class Main{
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat();
}
}
//実行結果
タマはチュールを食べる
こんなかんじ。
正直、どのような設計をすればインターフェースのメリットを引き出せるのかがピンと来ていません。。。
interface Animal{
String NAME = "タマ";
static void eat(){
System.out.println(NAME + "はチュールを食べる");
}
}
//実行
class Main{
public static void main(String[] args) {
Animal.eat();
}
}
//実行結果
タマはチュールを食べる
static を使えば、インスタンスは必要ありません。
分かりやすい例があったので引用させてもらいます。
家電製品を考えてみます。
【問題になるようなパターン(インターフェースなし)】
1.ドライヤーを作った
2.電子レンジを作った
3.冷蔵庫を作った
それぞれは共通のコンセントを持っていますので、一つの電源タップで利用することができるとします。4.新しい電化製品、テレビが発明された。
ここでこのテレビという製品は、新製品であるがためにコンセントの形が独自に作られていたとします。
そうすると従来の電源タップで使うことができません。変換機を買ってきたり、場合によっては家を工事する必要があるとします。
せっかくの新製品なのに、うまく使えず家庭の皆さんはさぞ怒ったことでしょう。また売るほうとしても工事が必要とあっては売れ行きに響くかもしれません。
これがインターフェースが統一されていないということです。【上記問題を解決するようなパターン(インターフェースあり)】
0.コンセントの規格が決まり、電化製品は基本的にはその規格に沿ったコンセントを作る必要があることになった(インターフェース)
1.ドライヤーを作った
2.電子レンジを作った
3.冷蔵庫を作った
4.テレビが発明された
ここで上記の家電製品のコンセントの形が全て統一されていれば、全て同じ電源タップが使えますね。変換機を買ってきたり、工事をしてコンセントの形を変えたりなどということは不要になります。
逆に言えば、家電製品の開発者は「コンセントの形を統一する必要性に迫られる」ということになりますが、それがインターフェースの本質です。
https://teratail.com/questions/70213?link=qa_related_pc