Метод doSomethis()
равен пакетный в классе A:
public class A {
int doSomthing(int x) { // this is package-private
return x;
}
}
Но это public в интерфейсе B:
public interface B {
int doSomthing(int x); // this here is public by default
}
Компилятор принимает doSomething()
, унаследованный C от A, который является package-private , в качестве реализации того, что в B, которое является public . Вот почему он жалуется -
"Унаследованный метод A.doSomthing (int) не может скрыть публичный абстрактный метод в B"
Потому что, хотя переопределяет метод, вы не можете сузить уровень доступа метода.
Решение простое, в классе C -
@Override
public int doSomthing(int x) {
// ...
}