java中方法覆盖的题目,求解原因,题目如下:

下面哪些方法置于指定位置会导致编译错误publicclassJ_Super{publicfloatgetNum(){return3.0f;}}publicclassJ_S... 下面哪些方法置于指定位置会导致编译错误
public class J_Super {
public floatgetNum(){
return 3.0f;
} }
public class J_Sub extends J_Super{
//指定位置
}
A public float getNum(){return 4.0f;}
B public void getNum(){}
C public void getNum(double d){}
D public double getNum(float d){return 4.0d; }

注:在Eclipse中编译,A、B选项不能编译,C、D选项可以
这道题可否用“在Java中,在子类中可以增加域、增加方法或者覆盖超类的方法,然而绝对不能删除继承的任何类和方法。”
C、D选项理解成子类J_Sub相比于超类J_Super增加了方法,但是B选项卫视恩么不是增加方法呢,还有A选项不是子类J_Sub对超类J_Super的覆盖呢
我这样的理解对吗,A、B选项错的原因是什么,求大神指点,谢谢
展开
 我来答
百度网友6f87babd4
2013-04-17 · TA获得超过1395个赞
知道小有建树答主
回答量:948
采纳率:50%
帮助的人:372万
展开全部
A选项是子类J_Sub对超类J_Super的覆盖。
public floatgetNum(){ float 和 getNum之间你加空格了吗?没加空格不能编译的。

你在子类中加了 B 选项的方法,如果让虚拟机调用的话,它会调用哪个呢?方法名相同,参数列表相同,虚拟机会崩溃的。打个比方,这相当于 你叫张三,你的身份证号是1234,另外一个人也叫张三,他的身份证号也是1234,你当然认为这没什么,但这会让公安部门崩溃的,虚拟机就像公安部门,你这样做他很生气,后果很严重。

C、D是对父类方法的重载(参数列表不一样),重载方法可以存在于同一个类中,相当于有两个张三,但身份证号不一样,公安部门知道哪个是哪个。
所以答案是B
更多追问追答
追问
A    确实是我弄错了   A可以编译的

B 虚拟机调用的时候不考虑调用它时候的隐式参数吗,我一直不清楚在动态绑定中隐式参数到底起了什么作用,返回值和隐式参数有关系吗

C、D选项 不是子类父类之间的方法只能是叫覆盖或者重写吗 子类和父类之间为什么还要用重载形容呢?
追答
A选项你是不是用了中文的  分号 , 要用英文的。
B虚拟机调用的时候要考虑它的参数,但你的父类方法和B选项方法都是无参数的,也就是参数列表是一样的。
返回值要看你调用的是哪个函数,那个函数的返回值就是返回值。
C、D方法是重载,不是重写。
重写:override,也叫覆盖,要注意以下问题。
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

重载:overload。它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,虚拟机就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:
1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序;
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
专治八阿哥的孟老师
2013-04-17 · 爱生活,爱编程,专心于学习技术和撸猫
专治八阿哥的孟老师
采纳数:494 获赞数:3914

向TA提问 私信TA
展开全部
如果你题目没打错的话那A选项是没错的。它是覆盖了父类的方法。
B,增加方法的话要么方法名不一样,要么参数传递的参数个数或类型不一样。
B 选项虽然返回值类型不一样,但是函数名和参数都与父类中一样。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友845f74e61
2013-04-17 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1626万
展开全部
B
会导致编译错误。

A 方法名,参数,与父类相同 这就是方法的重写。
B 方法名相同,参数相同,返回类型不同会认为是 与父类方法冲突。 overrides J_Super.getNum

C
D
方法名相同,参数不同,这是重载。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liujin7491
2013-04-17 · TA获得超过145个赞
知道答主
回答量:71
采纳率:0%
帮助的人:56.4万
展开全部
A)是重写(覆盖),返回类型和参数都一样,这个应该可以编译的;
B)既不是重载也不是重写,所以不能编译;
C)多了一个参数,并且返回类型改为void,是重载,可以编译;
D)多了一个参数,并且返回类型变为double,也是重载,可以编译。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fylsh
2013-04-17 · TA获得超过950个赞
知道小有建树答主
回答量:1472
采纳率:0%
帮助的人:1049万
展开全部
B,不可以,java中区分方法是按照方法签名,即方法名+参数形式,如果两者相同则视为同一个方法,所以B和父类中的getNum()冲突了
A和父类中方法完全相同(包括返回类型),视为子类覆盖父类行为
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式