黑马程序员技术交流社区
标题:
问个毕老师视频中的问题。。没听明白
[打印本页]
作者:
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