Переопределение против сокрытия Java - Confused
Я не совсем понимаю, как переопределение отличается от скрытия в Java. Кто-нибудь может предоставить более подробную информацию о том, как они отличаются? Я прочитал Java Учебник но пример кода все еще оставил меня в замешательстве.
Чтобы быть более понятным, я хорошо понимаю, что такое Overriding. Моя проблема в том, что я не вижу, чтобы скрытие отличалось, за исключением того факта, что один находится на уровне экземпляра, а другой - на уровне класса.
Смотрим на учебный код Java:
public class Animal {
public static void testClassMethod() {
System.out.println("Class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("Instance " + " method in Animal.");
}
}
Тогда у нас есть кошка подкласса:
public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The class 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();
}
}
Затем они говорят:
Выход из этой программы выглядит следующим образом:
Классный метод в Animal.
Метод экземпляра в Cat.
Для меня тот факт, что вызов метода класса testClassMethod () непосредственно из класса Animal выполняет метод в классе Animal, довольно очевиден, ничего особенного там нет. Затем они вызывают testInstanceMethod () из ссылки на myCat, так что, опять же, довольно очевидно, что выполняемый метод является тем же, что и в случае с Cat.
Из того, что я вижу, скрытие вызова ведет себя как переопределение, так зачем делать это различие. Если я запускаю этот код, используя классы выше:
Cat.testClassMethod();
Я получу: Метод класса в Cat. Но если я удалю testClassMethod () из Cat, я получу: Метод класса в Animal.
Что показывает мне, что написание статического метода с той же сигнатурой, что и у родителя, в подклассе в значительной степени выполняет переопределение.
Надеюсь, я проясню, где я в замешательстве, и кто-то может пролить свет. Большое спасибо заранее