开发者

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 happenin开发者_运维问答g?


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


This shows error , because we can not create two same methods but different return type in same class. If in parent class contain any method, we can't create same method name with changing the return type in sub class. Now the question arise why we can't create this. we should discuss about following code.

class A {
    public void eat() { }
}

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

Class MainClass{ 
    public static void main(String[] args){

    A a = new B();
    a.eat();
   }

}

It will shows an error, because a.eat(); will be confused which method JVM should call. and it will return a runtime error. Thats why to overcome runtime error, it returns a compile time error.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜