e ae pessoal blz ?
Olha só… Sabemos que o tipo de referência define qual método sobrecarregado chamar, certo ?
Também sabemos que o tipo de Objeto define qual método subscrito chamar, certo ?
Mas… Como essa verificação é feita em tempo de execução ?
Pelo que entendi nos meus testes, quando se tem métodos sobrescritos( everridden )você usa um tipo da superclasse como referência e extancia uma objeto do tipo da subclasse, a java em tempo de execução verifica se a classe Pai possui o método chamado e se existir ele procura a sua sobreposição na classe filha, é isso mesmo ?
Dado o exemplo abaixo:
sabemos que não vai compilar
class Base {
private void aMethod(int base){
System.out.println("Base");
}
}
class Over extends Base{
public static void main(String[] args){
Base o = new Over();
int iBase = 0;
[b] [color=red]o.aMethod(iBase);[/color][/b]
}
public void aMethod(int iOver){
System.out.println("Over");
}
}
Não temos aqui uma subscrição de método, tendo em vista que o método do pai é privado, então logo não será herdado…
Mas ai é que vem a duvida… Como essa verificação é feita em tempo de execução ???
Pude perceber que ele verifica primeiro se existe o método na classe Pai, se existir ele vai procurar uma correspondência na classe filha…Mas como ele não consegue enxergar o método na classe Pai, acaba dando um erro de compilação pq não pode fazer a verificação, é isso ?
Esta é uma boa duvida para os aspirantes a SCJP.
Abraços,
Rulio Vangellis.