TestKiller Dúvida Questão 19

7 respostas
deyvid
1. class TestA { 
2. public void start() { System.out.println("TestA"); } 
3. } 
4. public class TestB extends TestA { 
5. public void start() { System.out.println("TestB"); } 
6. public static void main(String[] args) { 
7. ((TestA)new TestB()).start(); 
8. } 
9. } 
What is the result? 
A. TestA 
B. TestB 
C. Compilation fails. 
D. An exception is thrown at runtime. 

Answer: B

Letra B??? Alguém pode med dar um forcinha? Desde já agradeço

7 Respostas

F

kra… seguinte…

quando ele chama ((TestA)new TestB()).start() ele está chamando o método start da classe TestB…

mas como assim?

seguinte… TestB subscreve o método start da classe TestA, então
quando temos um novo objeto de TestB, a versão subscrita é chamada.

zoren

Ele criou uma instância da classe B e fez o cast da mesma para a ClasseA e invocou o método start que a classeB sobrescrevia

Note que isso só é possivel pois a classeB herda da CLasse A, vc pode tentar declarar métodos diferentes am ambas as classes pra ver como funciona

Se vc cria um objeto da classeA e instância como a classeB, esse objeto da classeA terá todas as caracteristicas da classeB, mas só os métodos que a classe A possui

os que não tem na classe A serão perdidos

rmala_ti

Isso é uma chamada polimórfica.

Usando uma variável de referência Pai(TestA) para um objeto Filho(TestB).

Como a classe filha TestB sobrescreveu o método herdado start() este será selecionado.

No tempo de execução o método será selecionado dinâmicamente baseado no tipo real do objeto, ou seja, o que foi criado após new.

Espero ter ajudado.

robinsonbsilva

Bom dia Jovens,

Só para reforçar, “leve em consideração o objeto criado”, que no nosso caso é new TestB().
Esse exercício confunde devido ao “cast” (TestA), mas "sempre tenha em mente que o que vale é o “objeto criado”.

deyvid

Mas gente boa, não tinha que rolando um “upCast” ??? para a class TestA e logo o método da classe A?

Um abração pra todos

zoren

Mesmo vc fazendo o cast, teve a implementação da classe B

É igual se vc fizesse

ClassA classe = new ClasseB();

Vc só veria os métodos da ClassA, mas eles teriam a implementação da ClassB

deyvid

Pois é zoren , mas você esta se referindo ao “downcast” o que entendi. Mas o problema é parace que esta fazendo “upcast” e é essa minha dúvida. :cry:

Um abração pra vocÊ

Criado 24 de fevereiro de 2010
Ultima resposta 25 de fev. de 2010
Respostas 7
Participantes 5