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选项错的原因是什么,求大神指点,谢谢 展开
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选项错的原因是什么,求大神指点,谢谢 展开
7个回答
展开全部
A选项是子类J_Sub对超类困宽坦J_Super的覆盖。
public floatgetNum(){ float 和 getNum之间你加空格了吗?没加空格不能编译的。
你在子类中加了 B 选项的方法,如果让虚拟机调用的话,它会调用哪个呢?方法名相同,参数列表相同,虚拟机会崩溃的汪桐。打个比方,这相当于 你叫张三,你的身份证号是1234,另外一个人也叫张三,他的身份证号也是1234,你当然认为这没什么,但这会让公安部门崩溃的,虚拟机就像公安部门,你这样做他很生气,后果很严重。
C、D是对父类方法的重载(参数列表不一样),重载方巧春法可以存在于同一个类中,相当于有两个张三,但身份证号不一样,公安部门知道哪个是哪个。
所以答案是B
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,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
展开全部
如果你题目没打错的话那A选项竖带是没错的。它是覆盖了父类的方法。
B,增加方法的话要么方法名不一样,要么参数传递的参数个数或类型不一样。余简芦
B 选项虽然返回值类型不一样,但是函数名和参咐悔数都与父类中一样。
B,增加方法的话要么方法名不一样,要么参数传递的参数个数或类型不一样。余简芦
B 选项虽然返回值类型不一样,但是函数名和参咐悔数都与父类中一样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
B
会导致编译错误。
A 方法名,参数,与父类相同 这就是方法的重写。
B 方法名相同,参并孝余数相同,返慎游回类型不同会认为是 与父类方法冲突。 overrides J_Super.getNum
C
D
方法名相同,参数不同绝滚,这是重载。
会导致编译错误。
A 方法名,参数,与父类相同 这就是方法的重写。
B 方法名相同,参并孝余数相同,返慎游回类型不同会认为是 与父类方法冲突。 overrides J_Super.getNum
C
D
方法名相同,参数不同绝滚,这是重载。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
A)是重写(覆盖),返回类型和参数都一样,这个应该可以编译的;
B)既不是重载也不是重写,所以不能编译;
C)多了一个参数,并且返回类型改为void,是信滚重载,可以燃腊编译;
D)多了一个参数,并且返回类型变为double,也是重载,可以编皮坦滑译。
B)既不是重载也不是重写,所以不能编译;
C)多了一个参数,并且返回类型改为void,是信滚重载,可以燃腊编译;
D)多了一个参数,并且返回类型变为double,也是重载,可以编皮坦滑译。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
B,不可数烂此以,java中区分方法是按照方法签名,即方法名+参数形式,如果两者历歼相同则视为同一个方法,所以B和父类中的getNum()冲突了
A和父类中方法完薯迅全相同(包括返回类型),视为子类覆盖父类行为
A和父类中方法完薯迅全相同(包括返回类型),视为子类覆盖父类行为
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询