#はじめに
今回はJavaのインターフェースについて書いていきたいと思います。
抽象クラスとの違いなど理解するのが難しい印象です。
少しでも理解につながれば幸いです。
抽象クラスについては下記の記事で書いているのでぜひご覧ください。
【Javaについてまとめてみたオブジェクト編】抽象クラスについて
##インターフェースとは
まず、インターフェースは抽象クラスと似ていますが、クラスではありません。
javaの参照型の一つであり、**抽象クラスを親クラスで使いた時は「継承」と言いますが、インターフェースは「実装」**と言います。
特徴としては、
- クラス宣言時にinterfaceを付ける
- newをしてインスタンスを作成することが出来ない。
- メソッドは抽象メソッドしか作成できない。
- アクセス修飾子はpublicかpackageしか使えない。
- 抽象クラスは一つしか継承できないが、インターフェースは複数実装できる。
といったものがあげられます。
###インターフェースの宣言
public interface インターフェース名{};
宣言する時はこのようにinterfaceを付けます。
###インターフェースの実装
//1つ実装
public Class クラス名 implements インターフェース名{};
//2つ実装
public Class クラス名 implements インターフェース名,インターフェース名2{};
//継承と併用
public Class 親クラス名 extends 子クラス名 implements インターフェース名,インターフェース名2{};
実装するときはこのようにimplementsを付けます。
複数インターフェースを実装したい場合はカンマ区切りで記述してあげます。
継承と併用することも可能です!
##抽象クラスとの違いを考えてみた
ここまで見た感じ抽象メソッドしか書けない点や複数の実装が出来る点など抽象クラスとの違いがいくつかありましたが、正直使い方のニュアンスが今いち分からんと思われる方もいるかと思います。
色々調べて他の方のQiitaも見たところ、このような違いが書かれていました。
クラス仕様としての型定義をしたいならインタフェース
継承関係にあり、処理の再利用をしたいなら抽象クラス
引用元:【詳解】抽象クラスとインタフェースを使いこなそう!!
一旦、人間で例えましょう。
人間には日本人、アメリカ人など様々な人種がいます。
これらの人種はみんなしゃべることが出来ますが、言語が違います。
仮に親クラス「人間」を作るとしたら抽象メソッドで「言語」みたいなのを作れば、それぞれサブクラスで話し方の違いを表現できます。
これが抽象クラスの役割で、必ずあるような機能を再利用してますね。
では、特技について考えてみます。
必ずしも人間みんなが特技があるという訳ではないと思うので、抽象メソッドで必ず実装するような設計にはできないかと思います。
ですが、特技を実装したくなった時に特技のインターフェースを作っておけば、いつでも個別の人間ごとにプラスで処理が書けるイメージになります。これがインターフェースです。
##さいごに
インターフェースどうだったでしょうか。
正直、私も完全に理解できてるか怪しいので指摘があれば教えてください!
途中で引用させていただいた記事は理解しやすいように思えたのでおススメします。
ご覧いただきありがとうございました。