Substituindo vs Escondendo Java - Confuso

Estou confuso sobre como Overriding difere de Escondendo em Java. Alguém pode fornecer mais detalhes sobre como eles diferem? Eu li oTutorial Java mas o código de amostra ainda me deixou confuso.

Para ser mais claro, eu entendo Overriding bem. Meu problema é que não vejo que a ocultação seja diferente, exceto pelo fato de uma estar no nível da instância enquanto a outra está no nível da classe.

Olhando para o código do tutorial 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.");
    }
}

Então nós temos um gato de subclasse:

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();
    }
}

Então eles dizem:

A saída deste programa é a seguinte:

Método de classe em Animal.

O método da instância em Cat.

Para mim, o fato de chamar um método de classe testClassMethod () diretamente da classe Animal, executa o método na classe Animal é bastante óbvio, nada de especial lá. Em seguida, eles chamam o testInstanceMethod () de uma referência ao myCat, portanto, é bem óbvio que o método executado é o da instância do Cat.

Pelo que vejo, o que a chamada oculta se comporta exatamente como ignorar, então por que fazer essa distinção. Se eu executar este código usando as classes acima:

Cat.testClassMethod();

Vou pegar:O método de classe em Cat. Mas se eu remover o testClassMethod () do Cat, então eu terei:O método de classe em Animal.

O que me mostra que escrever um método estático, com a mesma assinatura do pai, em uma subclasse praticamente faz uma substituição.

Espero que eu esteja deixando claro onde estou confuso e alguém pode lançar alguma luz. Muito obrigado antecipadamente!

questionAnswers(13)

yourAnswerToTheQuestion