初心者のJavaプログラミング

プログラミングガチ初心者がIT業界を目指して頑張ります。

【第22回】初心者のJavaプログラミング【インターフェイス】

こんばんは。
ここ2、3日寒いですね。朝方とか羽毛布団にくるまっていましたw

今日はインターフェイスです。

インターフェイスとは

インターフェイスとは、定数とメソッド宣言を1つにまとめたものです。
というように教科書に記載してありますが、よくわかりません。
クラスと何が違うのというところですが、まだ私自身違いが良く分かっていません。
抽象クラスをさらに押し進めたもの、っていうように考えてもらってかまわない、と先生はおっしゃっていたのできっとそうなんでしょうw そういうことにしましょう。

じゃあ抽象クラスと何が違うの?となる訳ですが、
大きな違いは、多重継承ができることだと思います。
どこかで書いたと思いますが、Javaは多重継承を許していません(C++は許しているみたいです)
ですが、インターフェイスの場合は、複数インターフェイスを1つのクラスに実装することが出来ます。

ここで注意点なのですが、宣言と実装は別ということです。
はじめに定数とメソッドの宣言をひとつにまとめたものと書きました。メソッドをまとめたものではないです。メソッドの宣言をまとめたものになります。

メソッドの宣言でメソッドの機能を書きます。メソッドの中身がない状態です。
メソッドの実装でメソッドの中身を書きます。どのような動作をするかということです。
例えばリモコンで言うと、
メソッドの宣言は、
「音量上げるボタンを押す」
「音量下げるボタンを押す」
といったものです。
それに対して、メソッドの実装は、宣言された「音量を上げるボタンを押す」「音量を下げるボタンを押す」メソッドの中身のことです。
音量を上げるボタンを1回押したら音量を1上げる。2回押したら2上げる。音量がMAXまでいったらそれ以上上がらないようにする。ある一定の音量まで上げると、聴力を失う危険性があります、等といった警告を出す。
というような実際の動きの部分を実装と言います。

Javaでのインターフェイス宣言の仕方

一般的には次のように書きます。

interface インターフェイス名 {
  // 定数
  定数1;
  定数2 = 2;
  
  // メソッドの宣言
  void upSounds(); //< 宣言だけ。実装しちゃだめ。
  void downSounds() {
    // こんな風に実装はしちゃだめ。できない。
  }
}

普通のクラスの宣言の仕方と同じ要領です。
ただ、メソッドの中身を書いちゃだめってとこだけが重要です。
インターフェイスは動作の中身ではなく、どんな機能を持っているかがユーザーや他のクラスが分かればいいのです。メソッドの中身をわざわざ他クラスに見せる必要はないということです。カプセル化の話にもつながってきますね(たぶん...)

宣言したので、実装もしなきゃですよね。そうでなければ意味がありません。
メソッドを宣言しときながら実装を書かないと、なんじゃこりゃーってことになるので(音量上げるボタン押しても何も起こらないze!)、宣言したメソッドの中身は必ず実装します。
次は実装の仕方です。

Javaでのインターフェイス実装の仕方

class クラス名 implements 実装するインターフェイス名 {
  public void upSounds() {
    // 中身を書いていく
  }
  public void downSounds() {
    // 中身を書いていく
  }
}

上記のようになります。
継承のextendsみたいな要領で書いていきます。

また、1つのクラスに複数インターフェイスを実装できるので、

class クラス名 implements インターフェイス1, インターフェイス2 {}

というようなことも出来ます。
この時ももちろん全てのメソッドの中身を書かなければなりません。

継承ではこんな風にはかけませんでしたよね。


インターフェイス自体も継承が出来ます。
そこらへんと、それ周りの説明は次回にします。

よだーん
インターフェイス = 取り扱い説明書みたいなイメージなのですが、合っているのでしょうかw
リモコンそのものがインターフェイスみたいなイメージです。
少し不安です。