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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沈子豪 中级黑马   /  2013-3-13 10:46  /  1536 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 沈子豪 于 2013-3-13 12:53 编辑

覆盖时,覆盖函数和被覆盖函数的返回值关系,是一定要保持一样?
还是覆盖函数返回值范围要小于或等于被覆盖函数的返回值?基本数据类型和引用数据类型一样吗?

评分

参与人数 2技术分 +1 黑马币 +6 收起 理由
黄玉昆 + 6 如果问题已解决,请将帖子修改为已解决,谢.
猫腻 + 1

查看全部评分

5 个回复

倒序浏览
覆盖是指子类中存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体(花括号中的部分)不同,当子类对象调用子类中该同名函数时会自动调用子类中的覆盖版本,而不是父类中的被覆盖函数版本。特征有:不同的范围(分别位于子类与父类);函数名字相同; 参数相同;
回复 使用道具 举报
本帖最后由 沉默de羔羊 于 2013-3-13 11:29 编辑

你这个问题是对重载和重写的定义混淆了:

首先要你明确是:
重载:函数名必须相同;必须具有不同的参数列表;可以有不同的返回类型;只要参数列表不同就可以了;可以有不同的访问修饰符。
重写(这里也就是你说的覆盖):函数名必须相同;参数列表必须完全相同;返回的类型必须相同;访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)。

其次,我再来回答你的“基本数据类型和引用数据类型一样吗?”的问题.

首先我说不一样,原因是基本数据类型的封装类就是引用数据类型,可以白话点说就是,基本数据类型是数据类型,引用数据类型就是对基本数据类型封装成了对象。
基本数据类型:
有八个,分别为:byte(字节),shot(短整型) ,int(整型),long(长整型),float(浮点型) ,double(双精度),char(字符型)  ,boolean(布尔型)
引用数据类型:
有八个,对应的是:Byte,Short,Integer,Long,Float,Double,Character,Boolean

评分

参与人数 1技术分 +1 收起 理由
scott0610 + 1 很给力!

查看全部评分

回复 使用道具 举报
我自己总结的几点希望对你有所帮助
1、子类函数的函数名、参数列表必须要和父类函数的函数名、参数列表完全匹配,才能覆盖
2、子类的方法的返回值必须和父类的方法的返回一致;
3、子类的方法所抛出的异常必须和父类方法的所抛出的异常一致,或者是其子类异常;
4、父类的方法不能为private修饰,否则只是在子类中只是重新定义了一个和父类方法相同名称的方法,并没有对其进行覆盖。
5.子类函数的访问修饰符一定要大于父类函数的访问修饰符或者和父类函数的访问修饰符相同。

点评

你总结的挺好,但第三和第四两点有一点点的误区。  发表于 2013-3-13 12:18
回复 使用道具 举报
刘松 发表于 2013-3-13 11:38
我自己总结的几点希望对你有所帮助
1、子类函数的函数名、参数列表必须要和父类函数的函数名、参数列表完全 ...

讲的很好,很详细
回复 使用道具 举报
刘松 发表于 2013-3-13 11:38
我自己总结的几点希望对你有所帮助
1、子类函数的函数名、参数列表必须要和父类函数的函数名、参数列表完全 ...

第三和第四点我理解的有什么不对地方吗?请告知,谢谢。:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马