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

关于方法返回值的问题!
interface m{
Object f();
}

class a implements m{
public String f(){
return "a";
}
}

这样的接口实现中为什么类 a 里面的f()方法返回的是String,而接口 m 中应该返回object对象,

这样的f()为什么算是对接口 m 的实现呢!难道f()可以不写成:
  public Object f(){}

??


------解决方案--------------------
简单来说 就是 返回值不作为鉴定方法身份的依据
------解决方案--------------------
方法在编译期调用时无法甄别返回信息
------解决方案--------------------
关注一下
------解决方案--------------------
String“是一个”Object,所以这样实现是没问题的。
但是,这样做没有什么意义,因为,当你把一个a的实例向上转型为m类型时,对该实例调用f(),它仍然是返回Object,因为这是接口中定义的。如:
m mm = new a();
// String s = mm.f(); // 编译错误,必须向下转型,因为f()是接口中的f(),不是a中的。
String s = (String) mm.f(); //这样才可以!
------解决方案--------------------
to dracularking:

只有重载时返回值才不被考虑,覆盖(或实现抽象方法)时,返回值也是被考虑在内的。因为String是Object的子类,所以才可以实现,但如果反过来,接口中定义是String f();而实现成Object f() { },就无法编译了,因为Object不是String的子类。
------解决方案--------------------
学习...............

------解决方案--------------------
学习了。。。。。。