分析每个选项的重写、重载,6个答案全对,为什么我的理解不对?

分析每个选项的重写、重载,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){}

正在回答

登陆购买课程后可参与讨论,去登陆

5回答

同学,你好!这也不全是eclipse的问题,我在命令行中尝试了一下,当Beta的bar方法的修饰符为private时,也会报如下的错误:

http://img1.sycdn.imooc.com//climg/5ca2d06d00018b1f05480192.jpg这里当做重写是错误的。祝学习愉快!


提问者 慕哥5118177 2019-04-01 21:51:25

父类有AB同名方法,子类C方法不满足重写A,但满足重载B,凭本事重载的,凭什么报错嘛,Eclipse自己不能完美符合JAVA的规范,怪不得市场占有率下降。 

我只能这样理解报错: 当父类有至少2个同名方法时,对父类同名方法来说,子类同名方法不都是重载的,也不满足重写的,就报错,即使只满足父类的1个同名方法重载,也报错。

 老师,我的理解正确吗?

 如果正确,为什么老师都不同意?

 如果不正确,怎么解释凭借这种理解可以正确判断这6个选项是否报错,怎么解释凭借这种理解,我已经可以搞清楚是重写还是重载。

所以,我暂时还不能采纳老师们的答案,还请理解。

chrismorgen 2019-04-01 15:08:23

1、A选项报错的原因是访问修饰符为private,private 的权限小于public,所以才会报错,关键是在修饰符上,与同时满足重载没有关系哦。

2、B选项就是重写,与同时满足重载也没有关系

3、C选项的理解是正确的,属于方法重载。

4、其余的几个选项也是正确的哦,祝学习愉快~

  • 提问者 慕哥5118177 #1
    父类有AB同名方法,子类C方法不满足重写A,但满足重载B,凭本事重载的,凭什么报错嘛,Eclipse自己不能完美符合JAVA的规范,怪不得市场占有率下降。 我只能这样理解报错: 当父类有至少2个同名方法时,对父类同名方法来说,子类方法不都是重载的,也不满足重写的,就报错,即使只满足父类的1个同名方法重载,也报错。 老师,我的理解正确吗? 如果正确,为什么老师都不同意? 如果不正确,怎么解释凭借这种理解可以正确判断这6个选项是否报错,怎么解释凭借这种理解,我已经可以搞清楚是重写还是重载。所以,我暂时还不能采纳老师们的答案,还请理解。
    2019-04-01 21:49:09
提问者 慕哥5118177 2019-03-31 21:29:33
//谢谢,但是看了题目里的答案解析,也看你回复了,我还是理解不了。
//我把所有方法都在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) {}
//所以,对父类的所有同名方法来说,子类方法不都是重载的,也不满足重写的,就报错。


好帮手慕雪 2019-03-31 17:19:19

1)A选项错误,重写方法的访问修饰限定范围需要大于等于父类方法;请注意A中的修饰是private哦。2)B因为Beta中没有此方法,所以它是重写。3)重载的意思是说原来有一个bar()方法,再现又加了一个bar(),重载不是重写,没有重载哪一下这么一说。这不是同一维度的东西。4)重写方法的返回值可以设置为与父类方法相同或是为父类方法返回值的子类,而该选项中返回值不满足这两个条件。5)与3)相同。6)与4)相同。祝:学习愉快

  • 提问者 慕哥5118177 #1
    //谢谢,但是看了题目里的答案解析,也看你回复了,我还是理解不了。 //我把所有方法都在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) {} //所以,对父类的所有同名方法来说,子类方法不都是重载的,也不满足重写的,就报错。
    2019-03-31 21:29:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师