web-dev-qa-db-ja.com

javaでのインターフェースの実際の使用は何ですか?

可能性のある複製:
抽象クラ​​スとインターフェイスクラス?
Java:インターフェース/抽象クラス/抽象メソッド

Javaでは、インターフェイスの使用はすべて抽象クラスによって実現されます。インターフェイスの利点の1つは、インターフェイスを実装すると、別のクラスも拡張できることです。 Javaのインターフェイスには他の用途や利点がありますか?

17
kandarp

好きなもの:何千もの抽象メソッドを1つの抽象クラスに入れて、このクラスを継承しますOR.

abstract class A
{
 //thousands of abstract method();
 abstract methodA();
 abstract methodB();
 abstract methodC();
}

//OR
interface ForOnlymethodA
{
 void methodA();
}
interface FormethodBandmethodC
{
 void methodB();
 void methodC();
}

したがって、特定のインターフェイスを継承することで必要なものだけを使用します。Abstractクラスを継承している場合、1つのクラスで不要で他のクラスで必要なすべてのメソッドを不必要に継承します..

23
FosterZ

インターフェイスを使用すると、さまざまな階層のクラス polymorphically を使用できます。

たとえば、次のインターフェイスがあるとします。

public interface Movable {
    void move();
}

任意の数のクラス、クラス階層全体は独自の特定の方法でMovableを実装できますが、それでも一部の呼び出し元はユニフォームで使用できます仕方。

したがって、次の2つのクラスがある場合:

public class Car extends Vehicle implements Movable {
    public void move() {
       //implement move, vroom, vroom!
    }
}

public class Horse extends Animal implements Movable {
    public void move() {
       //implement move, neigh!
    }
}

呼び出し側から見ると、それはMovableにすぎません

Movable movable = ...;
movable.move();  //who am I?

これがお役に立てば幸いです。

58
Todd

複数のインターフェイスを実装できますが、拡張できるクラスは1つだけです。完全に抽象化されたクラスは、インターフェイスに非常に似ていますが、抽象クラスに変数を含めることができる点が異なります。

本当に必要なものに依存します。 C++を使用すると、必要な数のクラスを拡張できますが、これはちょっとした障害になります。スーパークラスを1つしか持たないことの良い点は、心配する必要のある実装が他にも1つしかないことです(親が親を持っている場合でも、親の特定の組み合わせが親になります...)

インターフェイスにより、1つのオブジェクトが多くの役割を果たすことができますが、コードを再利用することはできません。

それは本当に継承について考えることを単純化することです。バランスで、私は彼らがそれを正しくしたと思います。

7
Robert

インターフェイスは 主格入力 in Java towork acrossdisjoint class階層

これは、クラス階層と「閉じた型」の「単一 継承 」制限によるものです。 subtype polymorphism とJavaによる実装;-)

この問題には、動的型付け、構造型付け、多重継承、特性など、他の解決策があります。それぞれのアプローチには利点と欠点があります。インターフェースは、Java。

1
user166390

抽象クラスに対する利点は?複数のインターフェイスを実装できるが、1つの(抽象または非抽象)クラスのみを拡張できるという事実を除き、そのすべてのメソッドが抽象およびパブリックであることは抽象クラスと同じです

0
Eran Medan