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();”这表示该方法没有为该类定义。这是为什么?这不是使用多态行为的正确方法吗?
答案 0 :(得分:2)
这不是使用多态行为的正确方法吗?
如果您调用getNames()
(接口中定义的方法),这将是一种完美的接口编程方式。但是,getTypes()
仅在类中定义,但不在接口中定义。不允许编译器使用此信息,因此发出错误。
您可以通过向界面添加getTypes()
或将myClass
变量的编译时类型更改为MyClass
来解决此问题。
答案 1 :(得分:0)
把“public List getTypes();”在MyClient类的MyInterface.Or中使用
MyClass myClass = (MyClass) myClassFactory.create();
这一行而不是`
MyInterface myClass = myClassFactory.create();