От docs: «Если подкласс определяет статический метод с той же сигнатурой, что и статический метод в суперклассе, то метод в подклассе скрывает тот, который находится в суперклассе».Почему это называется «метод скрывается»?
Я понимаю разницу между методом скрытия и переопределения. Тем не менее, странно сказать, что подкласс скрывает суперкласса метод, потому что если у вас есть следующие:
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The static method in Cat");
}
public void testInstanceMethod() {
System.out.println("The instance method in Cat");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal.testClassMethod();
myAnimal.testInstanceMethod();
}
}
статический метод суперкласса называется. Но по определению сокрытия метод в подклассе скрывает одно в суперклассе. Я не вижу, как подкласс «скрывает/скрывает» статический метод суперкласса, поскольку метод суперкласса - это тот, который на самом деле называется.
Я думаю, что это похоже на то, как локальная переменная может скрыть поле. Поле все еще доступно (так же, как и статический метод суперкласса), но он скрыт (сложнее получить доступ), так как поведение Cat.staticMehodName() - это вызов Cat, а не Animal. –