| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1496 人关注过本帖
标题:[求助]问题求助!关于返回类型为接口
取消只看楼主 加入收藏
dragon555
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-3-16
收藏
 问题点数:0 回复次数:2 
[求助]问题求助!关于返回类型为接口

有时候会看见程序中的返回类型是接口类型,这是什么意思?
例如:
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()等本来就是空的方法,不含方法体的,而在你实现了该接口之后,编译器会自动的写出接口中该方法的方法体以实现功能的呢?

搜索更多相关主题的帖子: 接口 类型 FONT getItems Collection 
2007-03-16 20:52
dragon555
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-3-16
收藏
得分:0 
多谢BZ的回答,是不是这样?一个类实现了一个接口,所以该类实现了该接口中的方法,所以说子类是父类,在需要使用该接口中方法的时候,只要实例化一个实现了该接口的类的对象,因为此对象包含了该接口的所有方法,所以可以间接使用接口中的方法。

还有一点,书上的定义:接口中的方法只能是抽象方法,接口中的方法只给出方法名,返回值和参数表,不含具体实现功能的方法体。那么,Collection是一个接口,为什么它其中包含了很多有具体功能的方法呢?JDK文档中的资料。是不是这些方法是在某个类实现了该接口后,在该方法没被重载的情况下,由编译器自动在该类中隐藏生成了这些方法的方法体的呢?

2007-03-17 11:09
dragon555
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-3-16
收藏
得分:0 

恩,我的描述有些问题,就是说在JDK文档中,某个接口下面的Method Summary(方法描述)中的方法,实际是在实现该接口的类中进行覆写的,例如Collection接口中的iterator()方法,ArrayList是一个实现了Collection接口的类,在JDK文档中ArrayList的方法描述中并没有iterator()方法,但是实际它已经对Collection接口的iterator()方法进行了覆写,实现了Collection接口的方法描述中的iterator()方法的功能,实际在定义Collection接口的时候,iterator()只是一个空的方法。是这样么?
所以,必须要有实现了接口的类的对象,才可以调用接口中的方法。

2007-03-17 14:13
快速回复:[求助]问题求助!关于返回类型为接口
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032353 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved