后退

评论

程序猿的程
程序猿的程 发表于 2017-05-09
方法重写应遵循“三同一小一大”原则:
  1. “三同”:即方法名相同,形参列表相同,返回值类型相同;
  2. “一小”:子类方法声明抛出的异常比父类方法声明抛出的异常更小或者相等;
  3. “一大”:子类方法的访问修饰符应比父类方法更大或相等。


A选项是重写,但是默认访问修饰符比父类小,插入第五行编辑器会报错。
B、D不是重写。因为形参列表和返回值类型不同,不满足“三同”。所以写在第五行以普通方法对待,插入第五行没有错误。
C选项满足重写的各项条件,是正确的重写,所以插入第五行没有错误。

  • 三月灯火 回复 dream start :同问
  • 日日进步一点点de梁同学 :mark
  • qkfjcns :这是错的。
  • 阿呆的呆 :还三同。。。开什么玩笑
  • Joy201809021101667 :我怎么记得是两同两小一大呢,不是只需要形参和方法名相同,返回值类型要么相同要么为他的子类的嘛
  • changeit :兄弟你这三同一大一小和两同两小一大谁厉害点?
  • second_to_none 回复 程序猿的程 :兄弟你这个例子就有问题,并不能证明:比父类返回值类型小是不对
  • offer来一个吧 :返回值类型可以不同。
  • BigPeng 回复 朱大葱 :重载不是发生在父类和子类之间的关系 D方法就是子类的一个普通方法 和 父类没有任何关系
  • 库吧唧哇 :两同两小一大原则
  • 趣稚先生 :马克
  • zytBro 回复 :方法名相同,参数列表相同;子类方法抛出的异常要小于等于父类方法抛出的异常,子类方法的返回值类型要小于等于父类方法的返回值类型;子类方法的访问权限要大于等于父类方法的访问权限。
  • zytBro :应该是“两同两小一大”原则:
  • 小布小布小布 :记住了
  • 口可口可 回复 程序猿的程 :难道不是因为,这个参数类型不同吗。。他说的意思应该是,重写遵循的原则中,子类返回值类型比父类的小。而且,这个小的意思,,我的理解,是子类,也就是子类的返回值类型只能是父类返回值类型,或者其返回类型的子类。不知道理解的对不对,交流一下
  • 港岛'妹妹' 回复 dream start :子类继承父类的方法,然后你把那个方法写到子类里,很明显发现d选项是方法重载
  • 沉默、约定 :返回值类型可以不一样,但子类的返回值类型必须小于等于父类的返回值类型。你上面的写的返回值类型不是继承关系,没法比较类型的大小。
  • 朱大葱 回复 昨日青空 :选A,选项D方法是重载,参数列表不一样,并没有重写父类的方法,属于自己私有的方法,是完全可以的。
  • 锦辉_CJH :你错了,返回值不是相同,而是子类的返回值要小于等于父类的返回值
  • JacobGo! 回复 dream start :d不是方法重写
  • 昨日青空 回复 程序猿的程 :所以答案该选D是吗?
  • 雪莉橙 回复 程序猿的程 :明白了。d只是子类中的一个普通成员方法,没有重写父类所以无所谓修饰的访问控制符权限
  • 雪莉橙 回复 dream start :可能是D是方法的重载而不是重写
  • 程序猿的程 回复 dream start :子类方法的访问修饰符应比父类方法更大或相等
  • dream start :D选项不是也比public小吗?为何还是错的

牛客网©2016 All Rights Reserved