java中“两同两小一大"原则是指重写原则。
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限
关于这个问题我是因为做这道题所引发的
链接:https://www.nowcoder.com/questionTerminal/3f4af0f48392470c9493493741be0897
来源:牛客网
对于如下代码段
class A{
public A foo(){return this;}
}
class B extends A{
public A foo(){
return this;
}
}
class C extends B
{
——————这里应该填什么
}
可以放入到横线位置,使程序正确编译运行,而且不产生错误的选项是( )
- public void foo(){}
- public int foo(){return 1;}
- public A foo(B b){return b;}
- public A foo(){return A;}
C
重写 要求两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。[注意:这里的返回类型必须要在有继承关系的前提下比较]
重载 方法名必须相同,参数类型必须不同,包括但不限于一项,参数数目,参数类型,参数顺序
再来说说这道题 A B 都是方法名和参数相同,是重写,但是返回类型没与父类返回类型有继承关系,错误 D 返回一个类错误 c的参数类型与父类不同,所以不是重写,可以理解为广义上的重载访问权限小于父类,都会显示错误
虽然题目没点明一定要重载或者重写,但是当你的方法名与参数类型与父类相同时,已经是重写了,这时候如果返回类型或者异常类型比父类大,或者访问权限比父类小都会编译错误
ABD参数类型相同,算重写
C算重载
D选项的A没有定义,所以报错了!
在继承中也可能会在子类覆盖父类中的方法,在覆盖要注意以下的几点:
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、被覆盖的方法不能为 private ,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
网友评论