Java - Error : return type is incompatible

爷,独闯天下 提交于 2019-12-17 20:36:53

问题


I'm learning java. I was trying to run the code, where I got this error: return type is incompatible. Part of code where it showed me error.

class A {
    public void eat() { }
}

class B extends A {
    public boolean eat() { }
}

Why it is happening?


回答1:


This is because we cannot have two methods in classes that has the same name but different return types.

The sub class cannot declare a method with the same name of an already existing method in the super class with a different return type.

However, the subclass can declare a method with the same signature as in super class. We call this "Overriding".

You need to have this,

class A {
    public void eat() { }
}

class B extends A {
    public void eat() { }
}

OR

class A {
    public boolean eat() { 
        // return something...
    }
}

class B extends A {
    public boolean eat() { 
        // return something...
    }
}

A good practice is marking overwritten methods by annotation @Override:

class A {
    public void eat() { }
}

class B extends A {
    @Override
    public void eat() { }
}



回答2:


if B extends A then you can override methods (like eat), but you can't change their signatures. So, your B class must be

 class B extends A {
        public void eat() { }
 }



回答3:


B extends A should be interpreted as B is a A.

If A's method doesn't return anything, B should do the same.




回答4:


When a method in subclass has same name and arguments (their types, number, and order) as the method in superclass then the method in subclass overrides the one in superclass.

Now for the overriding to be allowed the return type of the method in subclass must comply with that of the method in superclass. This is possible only if the return type of the method in subclass is covariant with that of the method in superclass.

Since, boolean </: void (read: boolean isn't subtype of void), compiler raises the "return type incompatible" error.




回答5:


This is neither overloading nor overriding. We cannot overload on the return type and we cannot override with different different return types ( unless they are covariant returns wef Java 1.5 ).



来源:https://stackoverflow.com/questions/6015055/java-error-return-type-is-incompatible

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!