class A{
A(){
x();
}
void x(){
System.out.print("1");
}
}
public class B extends A{
B(){
super();
}
void x(){
System.out.print("2");
}
public static void main(String args[]){
A a = new B();
B b = new B();
}
}
acho que eh 12
na primeira vez ele utiliza o metodo x da classe A e na segunda sobrescreve o metodo na classe B… a nao ser que ele utilize o metodo da classe A entao sairia 11 mas boto fe que eh 12
ERREI ERA 22
nao vi que apesar da declarao ser da Classe A a instancia eh de B…
animal esse java polimorfico
Essa questão é realmente boa. Fiz baseada numa dúvida de um amigo.
Pasmem! A saída é 22!!!
Explicação: Em Java todos os métodos são virtuais por default. E sempre será executado os métodos mais próximos do objeto, nunca da variável de referência. Tanto a variável a quanto b são inicializadas com instâncias da classe B. Assim o método x() herdado é sempre substituído pelo x() de B
Não acretida? Pode compilar e executar! Não estou drogado!
[color="#FF0000"] Desafio[/color] Alguém consegue modificar a implementação do método x() de forma que a saída seja 11 ou 12??? (sem mexer na classe B) :xicote:
class A{
A(){
x();
}
private void x(){
System.out.print("1");
}
}
public class B extends A{
B(){
super();
}
void x(){
System.out.print("2");
}
public static void main(String args[]){
A a = new B();
B b = new B();
}
}
Ai está a resposta!
Mas agora pra imprimir 12 acho que não da hein?!?!?
ou alguem tem ideia de como fazer isso?!?!