1

次の例で、インターフェイス メソッドがクラス コンストラクターのパラメーターとして渡されたときに直接呼び出すことができる理由を誰かが説明できますか? Java 言語仕様でルールを検索しようとしましたが、見つかりません。

public interface Interface {
    public void foo();
}

public class Main {
    public Main() {}
    public Main(Interface obj) {obj.foo();}
    public static int test() {return 123;}
}
4

4 に答える 4

3

単なるポリモーフィックな動作であり、Java はそのインターフェイスのメソッドの実装を期待しています。つまり、そのメソッドを実装するクラスは であるInterfaceため、そのメソッドのさまざまな実装を多数持つことができます。まあ言ってみれば:

public class ImplementedInterface implements Interface
{
    public void foo()
    {
        System.out.println("Hey!, i'm implemented!!");
    }
}

だからあなたが呼び出すとき:

Interface aux = new ImplementedInterface();
Main m = new Main(aux);

「やあ、実装されました!!」というテキスト 印刷されます。

于 2013-07-05T02:05:42.877 に答える
0

ここでProgramming to an interface, not an implementation出番です。あなたのメソッドは、を実装するクラスのオブジェクトを期待していますinterface

例を挙げて説明します。

私が持っているとしましょう LinkedList<String> ll = new LinkedList<String>();

そして、私が持っています ArrayList<String> al = new ArrayList<String>();

今私は方法を持っています -

public void deleteFirst(List aList) {
  System.out.println(aList.remove(0));
 }

llこれで、 と の両方をメソッドalに渡すことができますdeleteFirst。つまり、あなたのメソッドには、を実装するクラスのオブジェクトが渡されますinterface

この例ではArrayList、 とLinkedListの両方がインターフェイスを実装しListているため、メソッドに渡すことができます。List最終的にメソッドが取得するのは、インターフェイスを実装するクラスのオブジェクトです。

于 2013-07-05T02:06:00.987 に答える