1. ホーム
  2. java

なぜインターフェースを使うのか, 複数継承とインターフェースの比較, インターフェースの利点?

2023-08-01 15:38:46

質問

この件に関して、私はまだ混乱しています。私が今まで発見したことは

(似たような質問はすでにここでされていますが、私は他の点を持っていました。)

  1. インターフェースは、ONLYの抽象メソッドと最終フィールドの集合体です。

  2. Javaには多重継承はありません。

  3. Javaで多重継承を実現するために、インターフェースを使用することができます。

  4. 継承の長所は、ベースクラスのコードを書き直すことなく派生クラスで使えることです。これは、継承が存在するための最も重要なポイントかもしれません。

今すぐ...

Q1. インターフェースは抽象的なメソッド(コードなし)しか持っていないので、インターフェースを実装していれば継承と言えるのでしょうか。そのコードを使用しているわけではありません。

Q2. インタフェースを実装することが継承でないとすると、多重継承を実現するためにインタフェースはどのように使われるのでしょうか。

Q3. インターフェイスを利用するメリットは何でしょうか? インターフェイスは、コードを持ちません。実装するすべてのクラスで、何度もコードを書き直す必要があります。

では、なぜインターフェースを作るのでしょうか?

注意。 インターフェイスが役に立つケースを一つ見つけました。例えば、Runnableインターフェースにはpublic void run()メソッドがあり、その中でスレッドの機能を定義し、このメソッドが別のスレッドとして実行されるようなコーディングが組み込まれています。つまり、私たちはスレッドで何をすべきかをコーディングするだけでよく、Restはあらかじめ定義されている。しかし、このことは抽象クラスなどを使っても実現できます。

では、インターフェイスを使うことのメリットは何なのでしょうか?インターフェイスを使って実現するのは、本当に多重継承なのでしょうか?

どのように解決するのですか?

インターフェースは、最終的な静的フィールドと抽象メソッドの集合体です(新たにJava 8ではインターフェース内に静的メソッドを持つことがサポートされました)。

インターフェイスは、あるタスクを実行しなければならないことは分かっているが、 その実行方法は様々であるような場合に作成されます。言い換えれば、私たちのクラスが特定の方法で動作するようにインターフェイスを実装すると言うことができます。

動物が何であるかは誰もが知っていることです。ライオンは動物、サルは動物、ゾウは動物、牛は動物といった具合です。そして、どの動物も何かを食べたり、眠ったりしていることは知っています。しかし、それぞれの動物によって、食べ方や眠り方は異なります。例えば、ライオンは他の動物を狩って食べますし、牛は草を食べます。でも、どちらも食べます。そこで、次のような擬似的なコードになります。

interface Animal {
    public void eat();
    public void sleep();   
}

class Lion implements Animal {
    public void eat() {
        // Lion's way to eat
    }

    public void sleep(){
         // Lion's way to sleep
    }
}

class Monkey implements Animal {
    public void eat() {
        // Monkey's way to eat
    }

    public void sleep() {
        // Monkey's way to sleep
    }
}

上記の擬似コードのように、食べたり眠ったりすることができるものはすべて動物と呼ばれることになります。

インターフェイスの場合、クラスの継承のように実際のコードを継承するのではなく、振る舞いだけを継承します。

Q1. インターフェースは抽象的なメソッド(コードなし)しか持っていないので、インターフェースを実装していれば継承と言えるのでしょうか?そのコードを使用しているわけではありません。

インターフェースの実装は、他の種類の継承です。クラスの継承とは異なり、子クラスはベースクラスから再利用するための実際のコードを取得します。

Q2. インタフェースを実装することが継承でないとすると、多重継承を実現するためにインタフェースはどのように使われるのでしょうか。

一つのクラスが複数のインタフェースを実装できるためと言われています。しかし、この継承はクラスの継承とは異なることを理解する必要があります。

Q3. インターフェイスを使うメリットは何ですか? インターフェイスはコードを持ちません。実装するすべてのクラスで、何度も何度もコードを書く必要があります。

インターフェースを実装すると、その抽象的なメソッドをすべてオーバーライドしなければならないという強制力がクラスに働きます。

詳しくは拙著 ここで そして はこちら