黑马程序员技术交流社区

标题: 问个毕老师视频中的问题。。没听明白 [打印本页]

作者: likairoudou    时间: 2013-6-14 18:15
标题: 问个毕老师视频中的问题。。没听明白
本帖最后由 孙百鑫 于 2013-6-15 08:48 编辑

public short show(int a , int b) {return 0 ;} 这个为啥不能存在于 Demo的子类中啊

class Demo  
{                  int show (int a , int b ) {return 0;}

  }
Demo的子类中啊

因为short啊。。。

作者: ′х.|鰉❤耔    时间: 2013-6-14 18:22
如果你是要用父类中的方法你可以直接super.方法来调用父类的方法,或者你可以重写父类中的方法,前提方法的名字返回值参数什么的度要一致相同噢~·不然就无法覆盖了噢~
作者: peerless2012    时间: 2013-6-14 20:40
编译器无法根据返回值类型区分重载函数(只能通过函数名以及参数列表的数目和类型来区分不同的函数),所以编译器看到的是两个相同的函数,然后就不知道怎么调用了
作者: j816326    时间: 2013-6-14 20:44
public short show(int a , int b) {return 0 ;} 这个方法的名称参数列表都和父类的show()方法的相同。所以JVM在解析的过程中会自动认为它是重写了父类的show()方法;而重写要求 返回值类型相同,所以不能通过编译。所以你把返回值类型定义为同一种类型就可以了
重写和重载的一个区别就是 重写不能改变返回值类型。而重载可以。楼主明白吗
作者: 影响力147753321    时间: 2013-6-14 20:53
举个例子
class A {
    public Object fun() {
        return null;
    }
}
class B extends A {
    public String fun() {
        return null;
    }
}
关于方法重写的一些特性:
  1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
  2.子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
  3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
根据2根据重写的定义看返回值是要类型一致的。
这个问题主要是对 类型一致 这个概念的理解问题
一般认为类型一致就是要完全一致。
可是通过这个例子看JVM并不是这样理解的。
只要类型转换可以通过JVM似乎就理解为类型一致了。,3条能确定第一条,子类方法的返回值必须是父类方法返回值的子类。基本类型就必须一样了。否则在编译时就会报错。
作者: likairoudou    时间: 2013-6-14 21:36
嗯嗯嗯谢谢大家啦
作者: 孙百鑫    时间: 2013-6-15 07:10
likairoudou 发表于 2013-6-14 21:36
嗯嗯嗯谢谢大家啦

您好.请及时将主题改成已解决:)
作者: 李九一    时间: 2013-6-15 07:37
因为返回值都是“return 0;”,如果在子类中改写的话,参数列表相同,得到的返回值不确定是子类的还是父类的!
作者: com_heima    时间: 2013-6-15 07:53
既不是重载,也不是重写,语法错误




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