Search code examples
javainheritanceoverridingreturn-type

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?


Solution

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