У меня есть сценарий ниже:
class C {
static void m1() {}
}
interface I {
default void m1() {}
}
//this will give compilation error : inherited method from C cannot hide public abstract method in I
class Main extends C implements I {
}
Ниже приведены мои вопросы:
-
Мне известно, что метод экземпляра переопределяет методы по умолчанию, но что, если статические методы в классе имеют такую же подпись, как метод по умолчанию в интерфейсе?
-
Если статический метод
m1()
вclass C
будет общедоступным, тогда ошибка компиляции будет:статический метод m1() конфликтует с абстрактным методом в I.
поэтому, когда модификатор доступа был по умолчанию, он пытался скрыть, и когда он является общедоступным, он конфликтует. почему это различие? какова концепция этого?