为什么java不允许在方法覆盖的情况下更改返回类型

Sad*_*hiv 0 java

我有A班:

 public class A {
    int sayHello(int i,int j){
        return i+j;
    }
 }
Run Code Online (Sandbox Code Playgroud)

另一个B类:

public class B extends A {  
    @Override
    int sayHello(int i, int j) {
        return i+j;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我将类A的方法sayHello(int,int)的返回类型从int更改为float,则会显示错误,因为根据覆盖规则,返回类型也被认为是为什么它也不是有效的覆盖和重载.

我很困惑为什么java不允许改变返回类型.为什么返回类型也需要相同

tka*_*usl 7

因为:

class Parent {
    int method() { return 1; }
}

class Child extends Parent {
    float method() { return 1.0f; }
}

Parent p = new Child();
int myInt = p.method();
Run Code Online (Sandbox Code Playgroud)

什么method()回报?它应该是一个int,因为Parent它说它是一个int.但是Child返回一个float.那么你期望发生什么?JVM应该崩溃吗?

顺便说一句,您可以更改返回类型,但它必须是类型的子类型,重写的方法返回.所以你可以覆盖一个返回a ParentChild用作返回类型的方法.