Java - Error : return type is incompatible

2020-02-06 07:06发布

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?

5条回答
▲ chillily
2楼-- · 2020-02-06 07:18

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() { }
}
查看更多
贪生不怕死
3楼-- · 2020-02-06 07:23

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

查看更多
Emotional °昔
4楼-- · 2020-02-06 07:35

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() { }
 }
查看更多
狗以群分
5楼-- · 2020-02-06 07:38

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

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

查看更多
Emotional °昔
6楼-- · 2020-02-06 07:39

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.

查看更多
登录 后发表回答