Esta linha não compila porque v é um vetor de Shape, não de Rentag.
Ela compilaria se você tivesse a seguinte declaração:
Shapeg=v.get(1);
ou então, se você sabe que o elemento 1 é com certeza um Rentag (que é o caso no seu exemplo: )
Rentagg=(Rentag)v.get(1);
derheimen
Shape é SUPERCLASSE de Rentag.
classRentagextendsShape{}
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(newCirc());v.add(newRentag());
O métod get(), retorna um objeto Shape.
Uma SUPERCLASSE não pode ser adicionada a uma referência de SUBCLASSE.
Rentagg=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.