Polimorfismo

1.  class Phone {
2.     static String device = "Phone.device";
3.     void showDevice() {
4.        System.out.print("Phone.showDevice," + device + " ");
5.     }
6.     Phone() {
7.        showDevice();
8.     }
9.  }

1.  class Mobile extends Phone {
2.     String device = "Mobile.device";
3.     void showDevice() {
4.        System.out.print("Mobile.showDevice," + device + " ");
5.     }
6.     Mobile() {
7.        showDevice();
8.     }
9.     public static void main(String[] args) {
10.      Mobile n = new Mobile();
11.      n.showDevice();
12.   }
13. }

pessoal, vcs poderiam me explicar o resultado dessa questão…porque que o metodo executado no construtor da classe pai…executa o metodo da classe filha…??

Obrigado.

Porque métodos sobrescritos(override) são resolvidos em tempo de execução.
O que vale é o tipo do objeto e não a sua referência nessa hora.
Como você tem o método showDevice nas 2 classes e o objeto que está chamando este método é do tipo Mobile, então Mobile.showDevice() é o que vai ser executado.

ana , somente fazendo um comentário… metodos “sobrepostos” , seriam overloading e não overrinding…(substituído…)…

seguinte ana…isso eu até entendo…o problema…e que eu achava que quando o construtor da subclasse fosse executado…antes ele passaria para o construtor da superclasse e chamaria o metodo “showdevice()”

Phone() { 
        showDevice(); 
 }


Mobile() { 
        //super(); 
        showDevice(); 
 }

mas to vendo que isso nao aconteceu…mas eu ainda penso que ele deveria fazerisso…hehe…vou ter que dar mais uma estudada…

:wink:

[quote=“Duque”]ana , somente fazendo um comentário… metodos “sobrepostos” , seriam overloading e não overrinding…(substituído…)…
[/quote]
Não foi isso que eu disse! Ou pelo menos não quis dizer, desculpa.
Não sei qual é a tradução correta para override, por isso coloquei o termo em inglês entre parênteses.

[quote=“Duque”]seguinte ana…isso eu até entendo…o problema…e que eu achava que quando o construtor da subclasse fosse executado…antes ele passaria para o construtor da superclasse e chamaria o metodo “showdevice()”
:wink:[/quote]
O construtor de uma classe sempre chama o construtor da superclasse.
Acontece que no construtor da superclasse tem uma chamada a um método que foi feito um override na subclasse, portanto é o método da subclasse que é executado.[/quote]

ta certo…beleza…entendi…

eu vou fazer alguns testes por aqui…

obrigado…

viu…aproveintando…que vc fez a prova agora…

conta para nos…como foram as questoes de inner classes e collections se vc lembrar…

obrigado.

Eu estou colocando algumas das questões que caíram no meu exame aqui no fórum desde ontem…
Amanhã eu coloco mais algumas. :wink:

Overloaded -> sobrecarregado
Overriding -> sobreescrito