关于java子类方法覆盖(Override)父类方法时,该子类方法返回值的问题

0

书上说在方法覆盖(override)时,一定要保证返回值的兼容性。允许子类将覆盖方法的返回值类型定义为父类被覆盖方法返回值类型的子类型。我知道在子类中覆盖父类的方法时,子类方法的返回值类型与父类该方法的返回值类型相同肯定不会报错。但下面的代码为什么会错?

class OverRideA
{
    private int name;
    private int age;

    public OverRideA(int n,int a)//自定义构造器
    {
        name=n; age=a;
    }

    public int getN()//返回值类型为int
    {
        return age;
    }
}

class OverRideB extends OverRideA
{
    private short id;

    public OverRideB(int n,int a)
    {
        super(n,a);
        id=10;
    }

    public short getN()//覆盖父类的同名方法,返回值类型为short
    {
        return id;
    }

照理来说short应该是int类型的子类,short应该和int兼容的。但为什么编译器会报错:

3个回答

0

已采纳

引用文字
short应该是int类型的子类,short应该和int兼容的

这句话是有问题的,int和short是primitive type,不是reference type,因此int和short之间没有子类和父类的关系。

0

都是基础类型啊同志

0

java方法重写跟重载,跟返回类型是没有关系的,只跟参数类型个数,有关我是这么理解的,
你这种写法,当之类在调用此方法时,虚拟机怎么知道你要调用父类的还是自己的方法,所以基本上编译都是无法通过的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值