0

メソッドが定義されていない Functions というインターフェイスがあります。次に、そのインターフェイスを実装する実装クラスがあり、実装クラスでメソッドも定義されています。インターフェイス型の変数を作成し、それを実装型の新しいインスタンス (メソッドが定義されている) に割り当てるとします。変数からそのメソッドにアクセスできないのはなぜですか? ここで何かが足りないと思います。インターフェイス型の変数に、メソッドが定義されている実装型のインスタンスが割り当てられている場合、その変数を使用してメソッドを実行できるという印象を受けました。

お知らせ下さい。前もって感謝します。

4

4 に答える 4

2

概念的には、ここで間違ったことをしています。

「そのメソッド」を呼び出したい場合は、インターフェース型ではなく、実装型の変数を使用する必要があります。

または、「そのメソッド」が実際にインターフェイスの意図した機能に属している場合は、それをインターフェイスに「上」に移動する必要があります。

于 2013-10-17T11:47:44.530 に答える
1

私が理解できる限り、あなたの問題は次のとおりです。

// Interface with no methods
public interface Functions {
}

// Implementation class with a method defined in it
public class Implementation implements Functions {
    public void foo() {
        System.out.println("Foo");
    }
}

public class Main {
    public static void main(String[] args) {
        // Create a variable from the interface type and
        // assign a new instance of the implementation type
        Functions f = new Implementation();
        // You try to call the function
        f.foo();     // This is a compilation error
    }
}

これは正しい動作です。これは不可能です。コンパイラは variablefの (静的) 型がFunctionsであることを認識するため、そのインターフェイスで定義されている関数のみを認識します。コンパイラは、変数に実際にImplementationクラスのインスタンスへの参照が含まれているかどうかを認識していません。

この問題を解決するには、インターフェイスでメソッドを宣言する必要があります

public interface Functions {
    public void foo();
}

または、変数に実装クラスの型を持たせる

Implementation f = new Implementation();
于 2013-10-17T11:53:09.877 に答える