简体   繁体   中英

Java - Error : return type is incompatible

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,

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() { }
}

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() { }
 }

B 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 of void ), compiler raises the "return type incompatible" error.

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 ).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM