interface MyInterface {
public List<String> getNames();
}
class MyClass implements MyInterface {
@Override
public List<String> getNames() {
...
return names;
}
public List<String> getTypes() {
...
return types;
}
}
class MyClassFactory {
public MyInterface create() {
...
MyInterface myClass = new MyClass();
return myClass;
}
}
public class MyClient {
MyInterface myClass = myClassFactory.create();
List<String> types = myClass.getTypes();
}
このコードでは、最後の行「List types = myClass.getTypes();このメソッドはクラスに対して定義されていません。何故ですか?これは、多態的な振る舞いを使う正しい方法ではありませんか?Javaインタフェースを含む多態的な振る舞い
'のあなたはインタフェースで' getTypes'を定義していないので、あなたは、暗黙的にインターフェイスにキャスト後が表示されていません。 – 4castle
'myClass'は' MyInterface'のインスタンスで、 'getTypes()'関数を見ることができません。それをあなたのクラスにキャストしようとするかもしれません。 'リストタイプ=((MyClass)myClass).getTypes();' –