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!