黑马程序员技术交流社区

标题: 探讨子类覆盖父类方法时扩展返回值类型。 [打印本页]

作者: 杨华东    时间: 2012-9-25 13:17
标题: 探讨子类覆盖父类方法时扩展返回值类型。

import java.io.*;
public class Test1
{
public static void main(String[] args)
{
  Fu f=new Zi();
  f.print();
}
}
class Fu
{
//父类的print方法,注意:没有返回值类型。
public void print()
{
  String s="trghtgh";
  System.out.println(s);
}
}
class Zi extends Fu
{
//覆盖父类中的方法。但是我有一个想法,也许是我的版本问题。能不能在子类继承覆盖父类方法时把返回值类型给扩展一哈!!
//这样程序扩展性 岂不是更强大?????随便探讨一哈,个技术分。
public void print()
{
  String s="ghfhjy";
  int i=44564654;
  System.out.println("s="+s+"   i="+i);
}
}


//
  1. <font color=red size=7>问题://覆盖父类中的方法。但是我有一个想法,也许是我的版本问题。能不能在子类继承覆盖父类方法时把返回值类型给扩展一哈!!
  2. //这样程序扩展性 岂不是更强大?????随便探讨一哈,个技术分。
  3. </font>
复制代码

作者: 张小龙    时间: 2012-9-25 13:35
public void print()
{
  String s="trghtgh";
  System.out.println(s);
}
}
class Zi extends Fu
{
//覆盖父类中的方法。但是我有一个想法,也许是我的版本问题。能不能在子类继承覆盖父类方法时把返回值类型给扩展一哈!!
//这样程序扩展性 岂不是更强大?????随便探讨一哈,个技术分。
public void print()
{
  String s="ghfhjy";
  int i=44564654;
  System.out.println("s="+s+"   i="+i);
}
上面是你的代码,但是,如果你把子类的这个方法的返回值类型改变了,就不是覆盖了,就是一个新方法了
所以,要保证覆盖以便于在多态时能用到,只能保证类型完全跟父类一样,那样才是覆盖,如果不清楚
可以在前面加个@Override 然后再写你覆盖的方法,这样能保证你是在覆盖父类方法。


作者: 汪小照    时间: 2012-9-25 13:42
返回值类型当然不能扩展了,那就不叫覆盖了。
什么是覆盖?就是除了修饰符的权限稍微可以改变以外,修饰符权限可以扩大,例如,protected可以扩大为public,
其它的(函数名称,参数类型,参数个数,函数返回类型)都必须一模一样。
作者: 杨华东    时间: 2012-9-25 13:47
嗯嗯  你讲的有道理  可是  估计 应该有 这样的语法?我们怀疑我们现在学的 有一点脱节了,只是怀疑哈。  
作者: 杨华东    时间: 2012-9-25 13:48
你不觉得有点被束缚的感觉吗?

作者: 杨华东    时间: 2012-9-25 15:36
问题 讨论结束
作者: 杨华东    时间: 2012-9-25 15:40
问题已解决
作者: 王贵朝    时间: 2012-9-25 15:58
复习父类的方法可以返回子类型,从1.5开始这叫做协变式返回类型
作者: 杨华东    时间: 2012-9-25 16:17
那我看看啊,真不知道啊   谢了兄弟




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2