为了账号安全,请及时绑定邮箱和手机立即绑定

java父子类之间是否存在重载的现象?

java父子类之间是否存在重载的现象?

开心每一天1111 2019-03-13 14:15:56
java的父子类之间是否存在重载呢?public class A{    public void a(int x){}}public class B extends A{    public void a(Object x){}}public class Main{    public static void main(String args[])       {           B b = new B() ;           b.a(2) ;           b.a(new Object()) ;       }}如果不存在那么对于A和B中的a方法怎么解释呢?我现在也有点乱了, 大家的观点都不一样...但是大家的意思是这肯定不是父子类之间的重载, 而且有提到覆盖. 我之间学习的过程中, 一直把重载就当作覆盖来看, 但是看样子我的理解是错的, 那么什么是覆盖呢?
查看完整描述

4 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

关于前两位的回答有以下说明和补充:
1.首先这不叫覆盖(Override)。类B继承了类A的方法a,且类B定义了一个新的方法a,两个方法参数不同,所以是两个不同的方法。
2.是否是重载(Overload)仍存在争论。
观点一:是重载,是发生在同一类中的重载。
【继承来的属性和方法尽管是隐式的,但仍是类B的属性和方法。】所以类B有两个方法,包括继承自a的方法,属于重载。
观点二:不是重载,重载只发生在同一类中,而类B继承类A方法的途径是通过查找调用(如上)。
、、、话说还有觉得是跨类重载的、、、但是这个和定义矛盾哈、、、

综上,此问题争议较多,个人比较倾向于观点一,【】内容来自baidu,下面是运行结果及代码。

https://img1.sycdn.imooc.com//5cbe7e270001d26106160313.jpg

关于覆盖和重载的区别:
1.覆盖,又称重写(Override)。发生在子类与父类之间。
子类是可以继承父类的某些方法的,当父类的方法对子类不适用时,需要在子类中写一个和父类一样的方法(当然方法内的程序块是不一样的),此处“一样”指方法名必须一样、返回值类型互相兼容、参数个数顺序类型必须一致等等。此时如果子类要用这一方法,就会直接调用覆盖过的方法,而当没有检测到重写时,才会调用从父类继承下来的方法。
举我学习时的例子:
https://img1.sycdn.imooc.com//5cbe7e2c000153ca05120348.jpg

因为不同动物的叫声和食物都不同,所以要将父类中的方法覆盖掉。

2.重载(Overload)。一般发生在同一类的不同方法间。
重载要求两个方法返回类型一样,方法名一样,参数列表不一样(类型、顺序、个数等)。
这样两个方法间互为不同的方法,调用哪一个时由参数决定。
举例:
class A{
void a(int i, float j){}
void a(float i, int j){}//两个方法接收的参数类型顺序不同,所以是两个不同的方法
}
class B{
void b(int i){}
void b(){}//参数个数不同,第二个方法无参数
}
class C{
void c(int i){}
void c(float i){}//参数类型不同
}


查看完整回答
反对 回复 2019-04-23
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

重载只发生在同一类中,你这个即不属于重载,也不属于重写,因为方法名和方法参数确定一个方法。a(int x)a(Object o)属于两个方法,所以子类B继承了父类Aa(int x)方法。


查看完整回答
反对 回复 2019-04-23
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

就是重载啊,java继承机制里,子类会开辟空间用来保存继承的父类成员,因为继承过来就和父类不是同一个了。例如B类里的a(int x)方法是和父类不一样的,可以在父类这个方法里打印一下当前类名,当子类调用时显示的会是子类名。

https://img1.sycdn.imooc.com//5cbe7e470001b9f107770490.jpg

查看完整回答
反对 回复 2019-04-23
  • 4 回答
  • 0 关注
  • 676 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信