为什么short在overriding的上下文中与int不兼容?

Md.*_*mud 0 java int primitive overriding short

我有一个名为child的子类,它继承了一个名为parent的类.我试图覆盖超类中的方法.我做了一点实验.我创建了overriden方法,其返回类型为short,这是int的子类型.据我所知,我可以这样做.并且该方法在法律上被覆盖.每当我使用超类的引用调用该方法时,编译器都会生成不兼容的返回类型错误.这有什么问题?我的代码如下:

class parent
{

    int test()
    {
        System.out.println("called inside parent\n");
        return 1;
    }
}

class child extends parent
{

    short test()
    {
        System.out.println("called inside child\n");
        return 1;
    }
}

class Myclass
{

    public static void main(String[] args)
    {
        parent a=new child();
        a.test();
    }
}
Run Code Online (Sandbox Code Playgroud)

Pét*_*rök 8

short是int的子类型

错了,事实并非如此.的取值范围short是一个子集的那的int,但是这是一个完全不同的问题.甲short值确实可以被转换为一个int(甚至隐含地),仍然是一个short 没有一个int.

原始类型不是常规类,因此它们不能具有超类型/子类型关系.因此,在这种情况下,您不能使用返回类型的逆变:一旦int在基本方法中声明了返回类型,它的所有重写都必须返回int.