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?
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,
OR
A good practice is marking overwritten methods by annotation
@Override
: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 ).
if
B
extendsA
then you can override methods (likeeat
), but you can't change their signatures. So, yourB
class must beB extends A
should be interpreted as B is a A.If A's method doesn't return anything, B should do the same.
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 ofvoid
), compiler raises the "return type incompatible" error.