【发布时间】:2017-05-13 00:25:41
【问题描述】:
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();”这表示该方法未为该类定义。这是为什么?这不是使用多态行为的正确方法吗?
【问题讨论】:
-
你没有在界面中定义
getTypes,所以一旦你隐式转换到界面,它是不可见的。 -
myClass是MyInterface的实例,因此它看不到getTypes()函数。您可以尝试将其投射到您的班级以查看它。List<String> types = ((MyClass) myClass).getTypes();
标签: java interface object-oriented-analysis