黑马程序员技术交流社区

标题: 覆盖的一些疑惑 [打印本页]

作者: 沈子豪    时间: 2013-3-13 10:46
标题: 覆盖的一些疑惑
本帖最后由 沈子豪 于 2013-3-13 12:53 编辑

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


作者: wanggang    时间: 2013-3-13 11:05
覆盖是指子类中存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体(花括号中的部分)不同,当子类对象调用子类中该同名函数时会自动调用子类中的覆盖版本,而不是父类中的被覆盖函数版本。特征有:不同的范围(分别位于子类与父类);函数名字相同; 参数相同;
作者: 沉默de羔羊    时间: 2013-3-13 11:26
本帖最后由 沉默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
作者: 刘松老师    时间: 2013-3-13 11:38
我自己总结的几点希望对你有所帮助
1、子类函数的函数名、参数列表必须要和父类函数的函数名、参数列表完全匹配,才能覆盖
2、子类的方法的返回值必须和父类的方法的返回一致;
3、子类的方法所抛出的异常必须和父类方法的所抛出的异常一致,或者是其子类异常;
4、父类的方法不能为private修饰,否则只是在子类中只是重新定义了一个和父类方法相同名称的方法,并没有对其进行覆盖。
5.子类函数的访问修饰符一定要大于父类函数的访问修饰符或者和父类函数的访问修饰符相同。

作者: 马甲大王    时间: 2013-3-13 11:50
刘松 发表于 2013-3-13 11:38
我自己总结的几点希望对你有所帮助
1、子类函数的函数名、参数列表必须要和父类函数的函数名、参数列表完全 ...

讲的很好,很详细
作者: 刘松老师    时间: 2013-3-13 18:25
刘松 发表于 2013-3-13 11:38
我自己总结的几点希望对你有所帮助
1、子类函数的函数名、参数列表必须要和父类函数的函数名、参数列表完全 ...

第三和第四点我理解的有什么不对地方吗?请告知,谢谢。:)




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