有时候会看见程序中的返回类型是接口类型,这是什么意思?
例如:
public Collection getItems(){
return items.values();
}
.......
for(Iterator i =getItems().iterator();i.hasNext();)
{.........}
以上代码中的items是HashMap类型。
如红色字体部分,为什么getItems()方法可以返回一个接口类型的值?接口不是不可以实例化对象么?如何作为一个值的类型?
还有一个一直想不通的问题,也是关于接口的,如上面蓝色部分,Collection是一个接口,按照接口的定义,接口中的方法只能给出方法名,返回值类型和参数表,不能包含实现功能的方法体,而Collection接口中包含很多实现了各种功能的方法,如上面的iterator() ,还有size() ,add(Object o) 等等,具体见JDK文档,这些方法都不仅仅是一个空的方法,包含着实在的功能,可以直接使用的,那么不是和接口的定义相违背了么? 是不是本来Collection中的这些方法如iterator()等本来就是空的方法,不含方法体的,而在你实现了该接口之后,编译器会自动的写出接口中该方法的方法体以实现功能的呢?