Duvida conjuntos whilabs

4 respostas
LPJava

ae pessoal uma questao do whilabs que fiquei com duvida pq nao compila:

import java.util.*;
class Shape{}
	class Circ extends Shape{}
	class Rentag extends Shape{}
	class Generi{
		public static void main(String args[]){
	Vector<Shape> v = new Vector<Shape>();
	v.add(new Circ());
	v.add(new Rentag());
	Rentag g = v.get(1);
		}
}

eu achei que na linha que diz que nao compila, que tem o get(1) pensei que ficaria assim

Rentag g = new Rentag();

e errei essa questao… quem puder me explicar nao conseguir entender ainda…
flw !

4 Respostas

T
Rentag g = v.get(1);

Esta linha não compila porque v é um vetor de Shape, não de Rentag.
Ela compilaria se você tivesse a seguinte declaração:

Shape g = v.get(1);

ou então, se você sabe que o elemento 1 é com certeza um Rentag (que é o caso no seu exemplo: )

Rentag g = (Rentag) v.get(1);
derheimen

Shape é SUPERCLASSE de Rentag.

class Rentag extends Shape{}

O Tipo genérico é um Shape.

No método add(), é permitido adicionar qualquer coisa que seja um Shape ou seu subtipo(Circ e Rentag).

v.add(new Circ());
v.add(new Rentag());

O métod get(), retorna um objeto Shape.
Uma SUPERCLASSE não pode ser adicionada a uma referência de SUBCLASSE.

Rentag g = v.get(1);

Obs: Se fosse ao contrário funcionária.

LPJava

po que pegadinha… me diz ai… get() so pode retonar Shape? nao pode retornar nenhum objeto que estenda a class Shape?

renan_java

E ai camilo… blz???

Então cara…respondendo sua pergunta…

O get irá retornar um tipo Shape pq o vetor é do tipo Shape, porém dentro do vetor existem também objetos que extendem Shapes, pois um Rentag é um Shape e um Circ também é um Shape, só que vc num pode fazer um Rentag receber o get, pois nem todos os objetos são Rentag, potanto o compilador não deixa compilar. Vc só conseguirá se vc tiver certeza que objeto que vc quer é um Rentag e fizer um cast para poder pegar o objeto.

Lembre-se Todo Rentag é um Shape, porém nem todo Shape é um Rentag.

Qualquer dúvida fala aew :wink:

Abraços

Criado 23 de fevereiro de 2007
Ultima resposta 24 de fev. de 2007
Respostas 4
Participantes 4