boom dia galera, venho aqui só pra esclarecer uma questão do testKiller para a certificação OCJP 1.6, e para saber se minha conclusão está certa e se existe algo a ser acrescentado.
abaixo o código da questão:
package br.com.ocjp;
public class SuperClasseDaQuestao183 {
String getText(){
return "text";
}
}
package br.com.ocjp2;
public class Questao183 extends br.com.ocjp.SuperClasseDaQuestao183{
String getText(){
return "<msg>text</msg>";
}
public static void main(String[] args) {
System.out.println(new Questao183().getText());
}
}
a resposta sugerida no test é:
B . Compilation fails
mas o correto seria:
C . text
por que? pergunta interessante, primeiro, sabemos que não podemos sobrescrever métodos com o modificado padrão a partir de uma classe de outro pacote por que não herdamos esse método. Segundo, observe que não temos a instrução import por isso devemos usar o nome totalmente qualificado da classe para usa-lá na sub Classe. Terceiro, como não herdamos o método nada nos impede de criar um método como mesmo nome pois minha sub classe não sabe sobre a existência do método da Super Classe, o que não poderíamos fazer é uma declaração polimórfica e chamarmos esse método, exemplo:
SuperClasseDaQuestao183 a = new Questao183();
a.getText();
por que não Fábio? rapazinho curioso vc né… bom, o motivo é que em tempo de compilação a JVM enxerga o método do tipo da variável de referência e não o do tipo do Objeto, o que acontece somente em tempo de execução, e nesse caso o método getText() da super classe não é visível de outro pacote.
É isso galera, agradeceria de verdade se eu recebesse um feedback sobre o que escrevi acima.