Pessoal,
to tentando achar uma razão para esse código funcionar, dêem uma olhada:
package pacote;
public class Animal {
protected void metodo(){
System.out.println("metodo animal");
}
}
package outroPacote;
import pacote.Animal;
public class Cavalo extends Animal{
protected void metodo(){
System.out.println("metodo Cavalo");
}
}
package pacote;
import outroPacote.Cavalo;
public class Teste
{
public static void main(String[] args){
Animal a = new Cavalo();
a.metodo();
}
}
A saída de dados é: metodo Cavalo.
Dúvida: O método sobrescrito em cavalo, possúi o modificador de Acesso “protected”, ou sejá só deveria ser acessado em subclasses de Cavalo ou no mesmo pacote.
No exemplo acima, a classe Teste não é subclasse de cavalo e nem está no mesmo pacote, porém em tempo de execução, o metodo protected é acessado normalmente.
Alguém sabe justificar?
Obrigado !
