Я понимаю, что в Java статические методы наследуются так же, как и методы экземпляра, с той разницей, что при их повторном использовании родительские реализации скрываются, а не переопределяются. Хорошо, это имеет смысл. Однако учебник Java отмечает, что
Статические методы в интерфейсах никогда не наследуются.
Почему? Какая разница между обычными и интерфейсными статическими методами?
Позвольте мне пояснить, что я имею в виду, когда говорю, что статические методы могут быть унаследованы:
class Animal {
public static void identify() {
System.out.println("This is an animal");
}
}
class Cat extends Animal {}
public static void main(String[] args) {
Animal.identify();
Cat.identify(); // This compiles, even though it is not redefined in Cat.
}
Однако
interface Animal {
public static void identify() {
System.out.println("This is an animal");
}
}
class Cat implements Animal {}
public static void main(String[] args) {
Animal.identify();
Cat.identify(); // This does not compile, because interface static methods do not inherit. (Why?)
}