父子类方法的关系,重写与重载
来源:1-1 继承的概念和特点
只能卷了
2022-04-24 19:31:16
问题描述:在方法重写的课中,有这样的一个问题

这个重写的eat() 和默认继承的 eat(String name)的关系到底是重载还是重写。 重载要求在同一个类中,那父类的eat(String name)和子类的eat()属于不同类,那就不是重载。同时eat的参数不同那也就不是重写(override). 所以我想的是既不是重写也不是重载的关系。
但是我在这个网站找到了一个争论点
https://segmentfault.com/q/1010000006147303#:~:text=%E5%B0%B1%E6%98%AF%E9%87%8D%E8%BD%BD%E5%95%8A%EF%BC%8Cjava,%E7%B1%BB%E4%B8%8D%E6%98%AF%E5%90%8C%E4%B8%80%E4%B8%AA%E4%BA%86%E3%80%82

是否是重载(Overload)仍存在争论
观点一:是重载,是发生在同一类中的重载。
【继承来的属性和方法尽管是隐式的,但仍是类B的属性和方法。】所以类B有两个方法,包括继承自a的方法,属于重载。
观点二:不是重载,重载只发生在同一类中,而类B继承类A方法的途径是通过查找调用(如上)。
所以到底是不是重载呢?如果是重载那不是与 <必须是同一个类中> 的规则相冲突了吗?
1回答
同学你好,这里方法的重载。
先从父类中继承方法,然后在本类中进行重载。这里建议同学学习完后面的反射章节之后,可以自己验证。老师提前给出验证的代码,如下图和打印结果:

可知在子类Sub中,获取了来自父类的所有方法,包括直接父类的无参method()方法和间接父类Object的多个方法,以及自身的有参method(int)方法。所以在子类中,同时存在了无参method和有参method(int),此时即为重载。
祝学习愉快~
相似问题