A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙百鑫 于 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啊。。。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

9 个回复

倒序浏览
如果你是要用父类中的方法你可以直接super.方法来调用父类的方法,或者你可以重写父类中的方法,前提方法的名字返回值参数什么的度要一致相同噢~·不然就无法覆盖了噢~

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
编译器无法根据返回值类型区分重载函数(只能通过函数名以及参数列表的数目和类型来区分不同的函数),所以编译器看到的是两个相同的函数,然后就不知道怎么调用了

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
public short show(int a , int b) {return 0 ;} 这个方法的名称参数列表都和父类的show()方法的相同。所以JVM在解析的过程中会自动认为它是重写了父类的show()方法;而重写要求 返回值类型相同,所以不能通过编译。所以你把返回值类型定义为同一种类型就可以了
重写和重载的一个区别就是 重写不能改变返回值类型。而重载可以。楼主明白吗

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
举个例子
class A {
    public Object fun() {
        return null;
    }
}
class B extends A {
    public String fun() {
        return null;
    }
}
关于方法重写的一些特性:
  1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
  2.子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
  3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
根据2根据重写的定义看返回值是要类型一致的。
这个问题主要是对 类型一致 这个概念的理解问题
一般认为类型一致就是要完全一致。
可是通过这个例子看JVM并不是这样理解的。
只要类型转换可以通过JVM似乎就理解为类型一致了。,3条能确定第一条,子类方法的返回值必须是父类方法返回值的子类。基本类型就必须一样了。否则在编译时就会报错。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
嗯嗯嗯谢谢大家啦
回复 使用道具 举报
likairoudou 发表于 2013-6-14 21:36
嗯嗯嗯谢谢大家啦

您好.请及时将主题改成已解决:)
回复 使用道具 举报
因为返回值都是“return 0;”,如果在子类中改写的话,参数列表相同,得到的返回值不确定是子类的还是父类的!
回复 使用道具 举报
既不是重载,也不是重写,语法错误
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马