所谓子类方法重写父类方法遵循“两同两小一大”的规则?

gip884 2013-02-18 12:52:13
所谓子类方法重写父类方法遵循“两同两小一大”的规则

两同:
1)
方法名
2)
形参列表
两小:
1)
返回值类型比父类更小或相等
2)
异常比父类方法更小或相等
一大:
子类权限比父类大或相等

是什么含义?



比如父类的 方法 返回是 long, 子类的返回是 byte 或者 short 或者 int 类型比父类返回类型范围小啊,为什么会报错?
...全文
4217 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
somebody0101 2015-03-25
  • 打赏
  • 举报
回复
引用 15 楼 Java_zhangrenlong 的回复:
我发现你们的表达能力真差,令这个题目变得更复杂了。 “两小”是不包括基本类型的,例如byte和int他们虽然有一定联系,但是他们不是父子关系,原因是没有继承关系。 返回值类型比父类的要小,这个返回值一定是有父子关系才行的,基本类型之间没有父子关系。
你的解释很对。当方法名和参数列表都相同的时候,父类的方法有一个引用类型的返回值,而子类是void,也会编译出错。原因就是void和任何类型都无法构成父子关系。对吧?
Toby.Zhang 2015-03-16
  • 打赏
  • 举报
回复
Toby.Zhang 2015-03-16
  • 打赏
  • 举报
回复
我发现你们的表达能力真差,令这个题目变得更复杂了。 “两小”是不包括基本类型的,例如byte和int他们虽然有一定联系,但是他们不是父子关系,原因是没有继承关系。 返回值类型比父类的要小,这个返回值一定是有父子关系才行的,基本类型之间没有父子关系。
panziyu_tody 2013-02-19
  • 打赏
  • 举报
回复
天真与无鞋!!!
yqj2065 2013-02-18
  • 打赏
  • 举报
回复
"返回值类型比父类更小或相等" 两者的返回值类型首先必须是一个类层次,再谈大小。
gip884 2013-02-18
  • 打赏
  • 举报
回复
我会否好像这样生于世上无~~~目~~~的~~~~鞭挞.......
gip884 2013-02-18
  • 打赏
  • 举报
回复
囧。。。看来有必要把J2SE再啃两遍....
silenceburn 2013-02-18
  • 打赏
  • 举报
回复
引用 8 楼 gip884 的回复:
那么为什么 子类的 属性 覆盖了父类,但是类型 可以跟 父类的不一样? 比如子类是 public String book ,父类是 public int book ?
你写段程序自己试试会不会覆盖? 字段都是早绑定的,根本没法覆盖的。 比如这段程序:
package A;

class Base{
    public String book = "abc";
}

class Derived extends Base{
    public int book = 12;
}

public class A {
    protected int i = 10;
    public int ii = 20;

    public static void main(String[] agrs) {
        Base b = new  Derived();
        System.out.println(b.book);
    }

}
_jerrytiger 2013-02-18
  • 打赏
  • 举报
回复
引用 8 楼 gip884 的回复:
那么为什么 子类的 属性 覆盖了父类,但是类型 可以跟 父类的不一样? 比如子类是 public String book ,父类是 public int book ?
属性是没有重写的 。 只有方法有重写 。 在子类中 如果访问父类的book 可以再子类中使用 super.book 访问 ,访问本类的book 可以用 this.book 访问 在多态的情况下 当使用父类引用子类对象时 通过该对象得到book的值 实际上是父类的book的值。
_jerrytiger 2013-02-18
  • 打赏
  • 举报
回复
屁哥 ,难怪在水源看不到你 。 居然跑到java版来混了。 子类重写方法的返回值必须比父类方法的返回值小或为其本身的意思是说 子类重写方法的返回值类型必须为父类方法的返回值类型 或父类方法返回值类型的子类类型 子类重写方法抛出的异常类型 只能是父类方法抛出的类型 或父类方法抛出的异常类型的子类类型 子类重写方法的可见性 必须大于或等于父类方法的 可见性 比如 父类方法是用 protected 修饰的 子类就只能用 public 修饰 而不能用private 修饰
gip884 2013-02-18
  • 打赏
  • 举报
回复
那么为什么 子类的 属性 覆盖了父类,但是类型 可以跟 父类的不一样? 比如子类是 public String book ,父类是 public int book ?
赏金--猎人 2013-02-18
  • 打赏
  • 举报
回复
lz名字很霸气!
gip884 2013-02-18
  • 打赏
  • 举报
回复
囧。。。好吧。。。
yqj2065 2013-02-18
  • 打赏
  • 举报
回复
两者的返回值类型首先必须是一个类层次,再谈大小。 返回值类型为基本类型时,父类子类的方法,返回值类型一样。
gip884 2013-02-18
  • 打赏
  • 举报
回复
引用 3 楼 yqj2065 的回复:
int就是int,哪来什么类层次。返回值类型为基本类型时,父类子类的方法,返回值类型一样。
那 “返回值类型比父类更小或相等” 这句话怎么理解, 意思不是说 int 比 long 类型更小吗?
yqj2065 2013-02-18
  • 打赏
  • 举报
回复
int就是int,哪来什么类层次。返回值类型为基本类型时,父类子类的方法,返回值类型一样。
gip884 2013-02-18
  • 打赏
  • 举报
回复
引用 1 楼 yqj2065 的回复:
"返回值类型比父类更小或相等" 两者的返回值类型首先必须是一个类层次,再谈大小。
也就是说 父类是 int 那子类也必须是 int ,然后再谈大小?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧