覆盖和返回类型兼容性
以下编译没有任何问题
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
( 文字 )
我的问题是,如果Boolean
和boolean
是兼容的,那么编译器为什么抱怨? 自动装箱不适用于此吗?
您只能返回父级返回类型的子类。
编译允许您在基元和包装器之间自动装箱和取消装箱,但这不会使另一个装置成为另一个子类。 基元不是类,不能按照您的建议使用。
我只是让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();