日期:2014-05-20  浏览次数:20821 次

求教!!java中方法返回类型可以是接口吗?
我们都知道Iterator是java中的一个接口,为什么调用实现了collection的对象中的方法iterator,可以返回类型是Iterator的东西,难道可以返回一个接口?
例如:
 Collection c=new Collection();
 Iterator i=c.iterator();


什么事面向接口的编程。。。。??
------解决方案--------------------
  当然可以返回接口,接口虽然不能被实例化,但是接口的实现类都可以向上转型为接口。
  所谓面向接口编程是指我们在编写代码时对数据参数的定义尽量写成接口,待真正实现的时候再用实际类型代替,这样编写的好处是,代码的耦合性降低,在运行时我只需修改实现类类型,就可以实现不同的功能,而不必要修改接口的代码。
------解决方案--------------------
可以返回接口。1.5以后的版本集合都是泛型,因此楼主你的Collection和Iterator都应该跟上尖括号,否则会提醒说这个是raw type。现在的1.7连Swing中的许多容器都是泛型了。
------解决方案--------------------
当然可以了,表面上是返回的接口,其实返回的是接口的实现类。
------解决方案--------------------
可以啊,应该有学过父类引用可以引用子类对象吧。
例如
class A{}
class B extends A{}

A a = new B();
上述语句是没问题的,而如果有一个方法如下
A fun()
{
    return B;
}
也是可以的,这就是多态的一个应用了。而把具体的类换成接口也行的通,这样子的话,B就是一个具体实现类或者子接口了。
java 5之前很多集合类的方法返回的是Object对象(针对JDK1.5之前的集合类,1.5由于有了泛型,好像这种方法比较少了)。就是因为Object对象是所有类的祖先类,所以如果返回值类型是Object的话,return任何对象都是正确的,就可以保证集合类对于任意类型的对象都可以正确返回。不过你拿什么去引用这个对象就是另外一回事了。
而面向接口编程我也不懂,至今了解的皮毛就是,给你一个接口,而我返回的具体实现类是什么你就不用管。只管用接口就行,感觉就是接口的对接吧。菜鸟理解不当请指出= =