私が理解できる限り、あなたの問題は次のとおりです。
// 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();