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

查看:824
本文介绍了关于java子类方法覆盖(Override)父类方法时,该子类方法返回值的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

书上说在方法覆盖(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兼容的。但为什么编译器会报错:

解决方案

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

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

这篇关于关于java子类方法覆盖(Override)父类方法时,该子类方法返回值的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆