Javaのインターフェースについてとりあえず軽く調べたので、とりあえずまとめてみようと思います。
#interfaceとは
interfaceは定数とメソッドの定義しかすることができません。
そして、宣言する場所ですが、これはクラスの外で定義をします。つまり、クラスの中で宣言をしてしまうとコンパイルエラーになってしまうので注意が必要です。
そして、interfaceで宣言した定数はどこでも使えるというわけではなく、その定数を使う場所を宣言しなくてはいけません。
そのやり方については、次の場所で説明します。
interfaceの書き方
interface インターフェース名{}
と書きます。
具体的には
interface HogeInterface{}
のようにして宣言します。
いまインターフェースの宣言のやり方を宣言したので、次から実際にインターフェースで定数を宣言して、実際にそれを使えるようにするまでやっていきます。
今手元には、interfaceであるhogeInterfaceと、hogeクラスがあります。
まず最初に、interfaceの宣言のやり方から説明していきます。
interface HotgeInterface{
//ここで宣言されているものは、すべて定数になる。
int a = 4;
int b = 3;
//そしてこの行で上で宣言した定数を使う関数を宣言します
void Hoge();
}
こうすることで関数hogeの中で定数aと定数bを使うことができるようになりました。
そして、宣言したinterfaceをどうやって別の関数の中で使っていくかというと、関数の親であるクラスにimplementsをつけて上げるだけです。
class Hoge implements HogeInterface{}
のようにimplementsをクラス名の後につけて宣言したインターフェースの名前をつけることで、hogeInterfaceの中で宣言した内容をhogeクラスの中で使うことができます。
#interfaceを使うメリット
自分なりに調べてみたのですが、取り合えずわかったのは以下です。
様々なクラスで、処理や定数を共通化して使うことができる。
というのがメリットだと思います。
よくあることとして、
「クラスAで使っている変数をクラスBでも使いたい。」
「クラスAとクラスBで処理を共通化できるところがあるから共通化して保守性を上げたい。」
ということだと思います。
なんとなくThymeleafでいうフラグメントみたいなものかなと思いました。
共通の関数で使える関数を宣言してインターフェースに置くことで色んな場所(クラス)で使うことができるというメリットが有るように思いました。
もう一つのメリットとしては、同時に複数のインタフェースを継承できることです。
クラスの継承では親クラスを子クラスに継承する場合,
その継承する側の子クラスは1つの親クラスしか指定できないはずです.
しかし、インターフェースを使えば複数のインターフェースを一つのクラスに対して扱うことができます。
これにより、クラス継承よりも処理の共通化がしやすいというメリットがあります。
以上になります。指摘やコメント等ありましたら教えて下さい!!
何分初心者なので指摘していただけるとありがたいです。