2

Java では、インターフェースにはメソッドの型、名前、およびパラメーターのみが含まれます。実際の実装は、それを実装するクラスで行われます。これを考えると、インターフェイスのインスタンスを作成し、それをクラス オブジェクトのように使用するにはどうすればよいでしょうか? org.w3c.dom.Nodeなど、そのようなインターフェースは多数あります。

これは私が使用しているコードです:

DocumentBuilderFactory fty = DocumentBuilderFactory.newInstance();
fty.setNamespaceAware(true);
DocumentBuilder builder = fty.newDocumentBuilder();
ByteArrayInputStream bais = new ByteArrayInputStream(result.getBytes());
Document xmldoc = builder.parse(bais);
NodeList rm1 = xmldoc.getElementsByTagName("Subject");
Node rm3 = rm1.item(0);
4

6 に答える 6

9

インターフェイスだけのインスタンスを作成することはありません。そのインターフェイス タイプのフィールド/パラメータ/ローカル変数を持つことができますが、それは問題ありません。そのような変数に割り当てられる値は、常に null またはインターフェイスの具体的な実装のインスタンスへの参照になります。ポイントは、インターフェースのみを扱うコードは、実装が何であるかを気にする必要がないということです。

良い例はCollections.shuffle(List)次のとおりです。任意のリスト実装を提供でき、インターフェイスで宣言されたメソッドのみを使用します。実際のオブジェクトは常に具体的な実装のインスタンスになりますが、shuffleメソッドは知る必要も気にする必要もありません。

于 2012-04-16T11:00:37.270 に答える
2

インターフェイスのインスタンスを作成するのではなく、インターフェイスを実装するクラスのインスタンスを作成します。必要な数の異なる実装を作成し、最適なものを選択できます。

コードでは、インターフェースに準拠するオブジェクトが必要な実装を使用できます。

于 2012-04-16T11:04:10.710 に答える
2

使用可能なインターフェイス クラスを取得するには、2 つの方法があります。インターフェースがある場合:

public interface Vehicle{
    public void drive();
}

1つ目は、あなたが言うように、インターフェースを実装するクラスを持つことです:

public class Car implements Vehicle{
    public void drive(){
        System.out.println("Here in my car I feel safest of all);
    }
}
Vehicle car = new Car();
v.drive();

または、匿名クラスを作成できます。

Vehicle v = new Vehicle(){
    public void drive(){
        System.out.println("Hello world");
    }
};
v.drive();
于 2012-04-16T11:01:31.483 に答える
1

インターフェイスは抽象型を持つ特別なクラスであるため、型がないため自己のインスタンスを作成できませ。いくつかのメソッドがあり、実装するクラスの型を保持します。したがって、参照変数のみを作成でき、それらはオブジェクトを参照し、オブジェクトのクラスがインターフェイスを実装する必要があります。

于 2013-02-07T00:17:39.093 に答える
0

インターフェイスのインスタンスを作成するのではなく、インターフェイスを実装するクラスのインスタンスを作成します。

例えば

Map<String, String> map = new LinkedHashMap<String, String>();

Mapインターフェースであり、インターフェースLinkedHashMapを実装するクラスです。

于 2012-04-16T11:04:35.623 に答える
0

これは

List<String> strings = new ArrayList<String>();

List はインターフェイスで、ArrayList は実装クラスです。これにより、実装 (クラス) が隠され、要件/契約 (インターフェース) のみが提供されます。ArrayList を LinkedList と交換できるため、これは適切なプログラミング方法です (リストに多くの文字列がない場合)。

于 2012-04-16T11:02:58.407 に答える