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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小丑的媳妇2 中级黑马   /  2013-3-8 11:01  /  1417 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家知道,重写Overriding是父类与子类之间多态性的一种表现,
重载Overloading是一个类中多态性的一种表现。这样问题就来了,
我想知道
第一,如果在子类中定义某方法与其父类有相同的名称和参数,那么该方法是不是被重写 ??

第二,如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,用Overloaded的方法是可以改变返回值的类型吗?

7 个回复

倒序浏览
本帖最后由 袁见 于 2013-3-8 11:38 编辑

第一,如果在子类中定义某方法与其父类有相同的名称和参数,那么该方法是不是被重写 ??

解答:如果父类方法具有private访问权限,则该方法对其子类是隐藏的,因此子类无法访问该方法,也就无法重写该方法。如果子类中定义了一个与父类private方法具有相同的方法名和相同的参数列表,相同的返回值类型的方法,依然不是重写,只是在中重新定义了一个新的方法。
   
第二,如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,用Overloaded的方法是可以改变返回值的类型吗?
解答:方法重载只要求同一类中方法名相同,参数列表不相同,与方法的返回值,修饰符等没有任何关系。
回复 使用道具 举报
袁见 发表于 2013-3-8 11:07
第一,如果在子类中定义某方法与其父类有相同的名称和参数,那么该方法是不是被重写 ??

解答:如果父类方法 ...

?????重载要求方法的参数列表相同了??
回复 使用道具 举报
贾文泽 发表于 2013-3-8 11:29
?????重载要求方法的参数列表相同了??

不好意思,少打了一个字,抱歉
回复 使用道具 举报
解答:问题1,根据重写的定义,子类中定义某方法与其父类有相同的名称和参数,那么该方法是被重写 ;问题2,如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,用Overloaded的方法可以改变返回值的类型,下面是一个简单的测试,不知道有没有表达清楚

截图02.jpg (44.96 KB, 下载次数: 7)

截图02.jpg
回复 使用道具 举报
美女,基础很重要啊!
第一个问题,答案是当然,如果都相同,而且方法的访问修饰符不严格与父类的方法修饰符,可不就是重写呗,人家就这么定义的。
第二个问题,嗯,像你说的一样,重载,无论返回值相不相同,只要参部分(参数的个数,类型,顺序)不同就是重载
回复 使用道具 举报
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
回复 使用道具 举报
补充下重写
子类重写父类方法的要求:子类方法的访问权限大于或等于父类方法的访问权限,方法名相同, 参数列表以及返回值类型必须保证一模一样才能实现重写。访问修饰访问权限的大小是:private(当前类访问权限)<default(同一个包中)<protect(同一个包中和不同包中的子类)<public(全局范围)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马