美文网首页
5."两同两小一大"原则

5."两同两小一大"原则

作者: 文茶君 | 来源:发表于2019-11-21 11:33 被阅读0次

    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 ,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

    相关文章

      网友评论

          本文标题:5."两同两小一大"原则

          本文链接:https://www.haomeiwen.com/subject/ypdhictx.html