Casting de referencia

4 respostas
G

Pessoal, eu me confundo mto nestes casting de referencia....

alguem tem alguma dica pra naum errar esses exercicios?

Given: 
11. class ClassA {} 
12. class ClassB extends ClassA {} 
13. class ClassC extends ClassA {} 
and: 
21. ClassA p0 = new ClassA(); 
22. ClassB p1 = new ClassB(); 
23. ClassC p2 = new ClassC(); 
24. ClassA p3 = new ClassB(); 
25. ClassA p4 = new ClassC();

Which three are valid? (Choose three.)
A. p0 = p1;
B. p1 = p2;
C. p2 = p4;
D. p2 = (ClassC)p1;
E. p1 = (ClassB)p3;
F. p2 = (ClassC)p4;

valew

4 Respostas

M

Quando você declara uma variável, você define seu tipo e depois a instancia. A construtor usado para a instanciação pode ser construtor de qualquer subclasse do tipo definido.

Pense no seguinte: sempre que você definir o tipo mais genérico, você pode instanciá-lo de forma específica. Exemplos:

Object frase = "Olá mundo"; // uma String é um Object, portanto isso é válido
List<Integer> lista = new ArrayList<Integer>(); // ArrayList é um List; OK!

Agora, se dois objetos tem uma superclasse em comum não necessariamente é possível fazer cast:

Beans b = new Beans(); // a classe java.beans.Beans é subclasse direta de Object
Calendar c = Calendar.getInstance(); a classe java.util.Calendar também
b = c; // isso não presta!

Por fim, o cast é possível de um supertipo para um subtipo, desde que tenha-se certeza que o objeto é uma instância da subclasse:

public void preenche(Object a) {
    // se o objeto não for instância de JButton, retorna
    if (!(a instanceof JButton)) {
        return;
    }
    // agora que temos a certeza que é um JButon, podemos tranquilamente fazer um cast de Object para JButton (do supertipo para o tipo mais específico)
    JButton b = (JButton) a;
    a.setText("Olá mundo!");
}

Isso ajudou?

evertonsilvagomesjav

Curiosidade á resposta é A,E,F?

M

Sim.

G

desculpa a demora pra agradecer, é q estava meio ocupado…

valew1!

Criado 6 de fevereiro de 2010
Ultima resposta 13 de fev. de 2010
Respostas 4
Participantes 3