Это потому, что у нас не может быть двух методов в классах с одинаковыми именами, но с разными типами возвращаемых данных.
Подкласс не может объявить метод с тем же именем уже существующего метода в суперклассе с другим типом возвращаемого значения.
Однако подкласс может объявить метод с той же сигнатурой, что и в суперклассе.
Мы называем это «Переопределение».
Тебе нужно это,
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...
}
}
Хорошей практикой является маркировка перезаписанных методов аннотацией @Override
:
class A {
public void eat() { }
}
class B extends A {
@Override
public void eat() { }
}