【Java】インターフェースについて( 変数とメソッドの型のみを定義したもの )

<!-- タイトル -->
# 【タイトル】 インターフェース
「 **[クラス] に含まれる [メソッド] の具体的な処理内容を記述せず、変数とメソッドの型のみを定義したもの** 」

<!-- 説明 「〜〜とはなど」-->
## 【説明】
インターフェースとは

- 処理無しの [メソッド] を記述した[クラス]
- 言葉としては「接点」、「境界面」の意味を持つ

## 【使用場面】

- ユーザ・インターフェース (UI)
- グラフィカル・ユーザ・インターフェース (GUI)
- コンソールユーザ・インタフェース (CUI)
- アプリケーションプログラミングインターフェース (API)

APIを例に上げた場合の例

1. ユーザーが 商品名を入力して検索
2. アプリ側が 仲介役の API にリクエストを送る
3. API がリクエストに会った内容をレスポンスする。

以上のように、インターフェースは「 *何かと何かを繋げる架け橋のような役割* 」を担っています。

## 【特徴】

- 実装先の[クラス]は 必ず [インタフェース]で宣言されている[メソッド]を[オーバーライド]し、
- [オーバーライド]した[メソッド]の実際の処理を記述
- 実装先のクラスはインターフェースに 制御（コントロール）される意味合いを含む
- 実装先のクラスはインターフェースを 複数 実装できる
- 使用目的を明確にて実装内容を絞らないと邪魔になることもある

<!-- ここから 各キャプチャー△▽△▽△▽△▽△▽△▽△▽△▽△ -->

<!-- ここから キャプチャー -+-+-+-+-+-+-+ -->
<!-- キャプチャータイトル -->
## Javaで使われるインターフェースについて

「 **[クラス] に含まれる [メソッド] の具体的な処理内容を記述せず、変数と[メソッド]の型のみを定義したもの** 」です。

### 【説明】

**「処理の実装されていない」というのは、 { }（ブロック） 内の処理が未実装 ということです。**

## Javaのインターフェースの特徴
インターフェースの特徴として以下が挙げられる

- [インスタンス変数]を持つことが出来ない
- 具象メソッド（抽象メソッドではないメソッド）を実装することができない
-  [インスタンスフィールド]を持たない
-  実装された場合、 [インスタンス] が生成された場合には抽象メソッドは必ず[オーバーライド] される必要がある
- [フィールド] のみ宣言できる


### 【使用場面】
Javaでは、以下のような不便があります。

- Javaでは多重 [継承] を認めないので、一度に [継承] できるクラスは常に１つのみ([スーパークラス]を1つしか持てない)
- 不要な [メソッド] もとりあえず [オーバーライド] しないといけない

ですが、インタフェースをつかうことで

- 多重[継承]が可能になる。
- 配下[メソッド]が全部抽象 [メソッド] である [クラス] になる。
- それぞれの [メソッド] は意味的に異なるインターフェースに振り分ける
- 派生 [クラス] 側で必要な [メソッド] のみ選択できる

といったことが可能になります。

インターフェースの具体例として、動画の再生プログラムを作るため、インターフェースでプログラムの再生・停止などの[メソッド]を組み込み、具体的な再生機能は各[メソッド]に記述します。


<!-- 基本構文 -->
### 【インターフェースの定義】

```java
interface インターフェース名{
}
```
<!-- ここから サンプルコード ★☆★☆★☆★☆★ -->
<!-- サンプルコードタイトル -->
### 【サンプルコード】 

<!-- サンプルコード概要 -->

<!-- サンプルコード -->
```java
public interface インターフェース名 {
    // 処理が実装されていないメソッド
    public void sample();
}
```

### 【インターフェースの実装】
「インターフェースの実装」とは、、、

- 定義済みインターフェースを継承して[クラス]を定義すること
- インターフェース実装した[クラス]を実装クラスという

```java
class クラス名　implements インターフェース名 {
}
```
<!-- サンプルコード説明があればここに記述 -->

<!-- ここまで サンプルコード ★☆★☆★☆★☆★ -->


<!-- ここまで  キャプチャー -+-+-+-+-+-+-+ -->



<!-- ここまで 各キャプチャー△▽△▽△▽△▽△▽△▽△▽△▽△ -->


<!-- 参考にした資料のリンクを貼る -->
## 参考文献・記事

- [【Java入門】interface(インタフェース)の使い方総まとめ](https://www.sejuku.net/blog/25772)



<!-- 以下リンク -->

[インスタンス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[動的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インスタンス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラスメソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラスフィールド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インターフェイス]:https://qiita.com/takahirocook/items/ca84be8dfef664b19194
[インターフェース]:https://qiita.com/takahirocook/items/ca84be8dfef664b19194
[パッケージ]:https://qiita.com/takahirocook/items/39b58d17abcb159ef5c1
[インポート]:https://qiita.com/takahirocook/items/59a8a09cab6a98d3bca2
[import]:https://qiita.com/takahirocook/items/59a8a09cab6a98d3bca2
[配列]:https://qiita.com/takahirocook/items/16a123fb73b30869053b
[配列操作]:https://qiita.com/takahirocook/items/16a123fb73b30869053b
[List]:https://qiita.com/takahirocook/items/4d622fc6f271569783b5
[list]:https://qiita.com/takahirocook/items/4d622fc6f271569783b5
[Map]:https://qiita.com/takahirocook/items/49f46151ecb5e332db32
[map]:https://qiita.com/takahirocook/items/49f46151ecb5e332db32
[set]:https://qiita.com/takahirocook/items/d498329cd26e1500f476
[Set]:https://qiita.com/takahirocook/items/d498329cd26e1500f476
[Date]:https://qiita.com/takahirocook/items/a760e20ef2d9aa5c08fc
[拡張for文]:https://qiita.com/takahirocook/items/470b2858de1a4f99b334

[printf()メソッド]:https://qiita.com/takahirocook/items/06d525be63eccd99ed49
[printf()関数]:https://qiita.com/takahirocook/items/06d525be63eccd99ed49
[書式指定子]:https://qiita.com/takahirocook/items/06d525be63eccd99ed49
[日時の文字列操作]:https://qiita.com/takahirocook/items/aa857c8f2153193095e4
[SimpleDateFormat]:https://qiita.com/takahirocook/items/aa857c8f2153193095e4
[Time]:https://qiita.com/takahirocook/items/9caef0bb2409caedba55
[Calendar]:https://qiita.com/takahirocook/items/204dd7331db777eb6f3b
[日付操作]:https://qiita.com/takahirocook/items/9caef0bb2409caedba55
[Progate]:https://prog-8.com/
[ドットインストール]:https://dotinstall.com/
[インスタンス]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[アクセス修飾子]:https://qiita.com/takahirocook/items/e51b0b9d37d95ad587fe
[フィールド]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[フィールド変数]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[new演算子]:https://qiita.com/takahirocook/items/00f9f97592bf50831d39
[new]:https://qiita.com/takahirocook/items/00f9f97592bf50831d39
[カプセル化]:https://qiita.com/takahirocook/items/e469a7c0539a0012868e
[クラス]:https://qiita.com/takahirocook/items/50cbbdca8e21539170e9
[メソッド]:https://qiita.com/takahirocook/items/5bfe43576d87a2a4006c
[mainメソッド]:https://qiita.com/takahirocook/items/f4635915337303de338c
[メソッドの呼び出し]:https://qiita.com/takahirocook/items/f4635915337303de338c
[コンストラクタ]:https://qiita.com/takahirocook/items/fa1822f2f22c3786593e
[引数]:https://qiita.com/takahirocook/items/5e5b0ba79e869f4a592e
[戻り値]:https://qiita.com/takahirocook/items/3b6fa670a1d6dd4a9386
[this]:https://qiita.com/takahirocook/items/d251ec4693c68f6b9538
[getter・setter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[setter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[getter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[オブジェクト指向]:https://qiita.com/takahirocook/items/041ba7a096b71ab8ffd4
[継承]:https://qiita.com/takahirocook/items/6c84ea66a6e2ad536a37
[オーバーライド]:https://qiita.com/takahirocook/items/09dd8e5f56d6617ce45a
[オーバーロード]:https://qiita.com/takahirocook/items/b937c3c07126fe7e02a4
[this]:https://qiita.com/takahirocook/items/d251ec4693c68f6b9538
[super]:https://qiita.com/takahirocook/items/75a07131e7e791c8442c
[スーパークラス]:https://qiita.com/takahirocook/items/75a07131e7e791c8442c
[final]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[final修飾子]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[定数]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[static修飾子]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[static]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インスタンスフィールド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735