分析每个选项的重写、重载,6个答案全对,为什么我的理解不对?
A private void bar(int x){}
private void bar(int x){}可以重载public void bar(int...x){}
B public void bar(int x){}
public void bar(int x){}即可以重写public void bar(int x){},又可以重载public void bar(int...x){},怎么判断重写还是重载?
C public int bar(String x){return 1;}
public int bar(String x){return 1;}重载两个都可以,怎么判断重载哪个?
D public Alpha bar(int x){}
public Alpha bar(int x){}可以重载public void bar(int...x){}
E public void bar(int x,int y){}
public void bar(int x,int y){}可以重载两个,怎么判断重载哪个?
F public int bar(int x){return x;}
public int bar(int x){return x;}可以重载public void bar(int...x){}
正在回答
同学,你好!这也不全是eclipse的问题,我在命令行中尝试了一下,当Beta的bar方法的修饰符为private时,也会报如下的错误:
这里当做重写是错误的。祝学习愉快!
父类有AB同名方法,子类C方法不满足重写A,但满足重载B,凭本事重载的,凭什么报错嘛,Eclipse自己不能完美符合JAVA的规范,怪不得市场占有率下降。
我只能这样理解报错: 当父类有至少2个同名方法时,对父类同名方法来说,子类同名方法不都是重载的,也不满足重写的,就报错,即使只满足父类的1个同名方法重载,也报错。
老师,我的理解正确吗?
如果正确,为什么老师都不同意?
如果不正确,怎么解释凭借这种理解可以正确判断这6个选项是否报错,怎么解释凭借这种理解,我已经可以搞清楚是重写还是重载。
所以,我暂时还不能采纳老师们的答案,还请理解。
1、A选项报错的原因是访问修饰符为private,private 的权限小于public,所以才会报错,关键是在修饰符上,与同时满足重载没有关系哦。
2、B选项就是重写,与同时满足重载也没有关系
3、C选项的理解是正确的,属于方法重载。
4、其余的几个选项也是正确的哦,祝学习愉快~
//谢谢,但是看了题目里的答案解析,也看你回复了,我还是理解不了。 //我把所有方法都在Eclipse试过了,理解如下,不知是否正确,请帮看下,谢谢! //A选项,private void bar(int x){} //不是重写,但明明符合父类另一个方法的重载,就不该报错,为什么碰到private就报错? //我理解的报错原因:Eclipse中如果子类方法同时满足重写父类一个方法和重载父类另一个方法,子类该方法不能是private,否则报错。 //B选项,public void bar(int x){} //不报错。是重写。 //我的理解:Eclipse中,当子类方法同时满足重写父类一个方法,又满足重载父类另一个方法时,优先重写。感觉逻辑和A选项的结果类似。 //C选项,public int bar(String x){return 1;} //不报错。 //我的理解:对父类的所有同名方法来说,子类该方法都是重载。所以不报错。 //D选项,public Alpha bar(int x){} //我理解的报错原因: //首先,不符合重写。 //其次,不符合重载。 //即使在父类中只生效public void bar(int...x) {},再根据提示,对子类方法加上return null,当时不报错,但父类两个方法都生效时,还是报错。 //所以,对父类的所有同名方法来说,子类方法不都是重载的,也不满足重写的,就报错。 //E选项,public void bar(int x,int y){} //与C选项同。 //F选项,public int bar(int x){return x;} //我理解的报错原因: //首先,不符合重写。但报错:The return type is incompatible with Alpha.bar(int)只代表不满足重写。 //虽然也不是父类该方法的重载public void bar(int x) {} //但是,确实满足重载父类另一个方法public void bar(int...x) {} //所以,对父类的所有同名方法来说,子类方法不都是重载的,也不满足重写的,就报错。
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星