覆盖和返回类型兼容性

以下编译没有任何问题

boolean flag = true; Boolean flagObj = flag; 

现在对以下场景进行成像

 interface ITest{ Boolean getStatus(); } class TestImpl implements ITest{ public boolean getStatus(){ // Compile error: return type is incompatible return true; } } 

我的问题是关于上述行的编译错误。 My Interface提到返回类型为Boolean但实现的方法返回boolean文字

我的问题是,如果Booleanboolean是兼容的,那么编译器为什么抱怨? 自动装箱不适用于此吗?

您只能返回父级返回类型的子类。

编译允许您在基元和包装器之间自动装箱和取消装箱,但这不会使另一个装置成为另一个子类。 基元不是类,不能按照您的建议使用。

我只是让getStatus()返回Boolean或使父命令返回boolean

从理论上讲,自动拳击可以扩展到允许你的建议,但我认为它并没有多大用处。

理论上你也可以写这个

 class A { int method() { ... } } class B extends A { short method() { .... } } 

由于编译器支持隐式向上转换。 然而,我怀疑这也没有多大用处。

我们知道,我们只能返回父类返回类型的子类.Here Boolean是包装类,而boolean是原始数据类型。简而言之,两者都是不同的包装类和原语。因此它给出了不兼容的错误。

这些方法在原型和实现上有不同的签名。 原语(不是类)不能inheritance原型的Boolean 。 即使使用自动装箱,实施也违反了通用原型。 返回执行自动拆箱,所以如果像这样实现getStatus:

 public Boolean getStatus(){ // Compile error: return type is incompatible return Boolean.TRUE; } 

返回后可以取消装箱:

 if(getStatus()) doSomething();