Переопределение против сокрытия 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.

Что показывает мне, что написание статического метода с той же сигнатурой, что и у родителя, в подклассе в значительной степени выполняет переопределение.

Надеюсь, я проясню, где я в замешательстве, и кто-то может пролить свет. Большое спасибо заранее

Ответы на вопрос(13)

Ваш ответ на вопрос