class A {
String a = "A";
}
class B extends A {
String a = "B";
}
public class Teste {
public static void main(String[] args) {
ArrayList<A> a = new ArrayList<A>();
a.add(new A());
a.add(new B());
List<? extends A> l = a;
Se compilar e executar qual será a saída e porque ???
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Ratinho[/color][/size] :joia:
A collection a é “type safe” do tipo A, isto é, manipula apenas objetos da Classe A.
Porem, a classe B é incluida na collection, que por sua vez estende a classe A. Isso é perfeitamente correto, pois o test IS-A é executado durante a inclusao do objeto na collection.
So que qdo o objeto é incluido na collection, é feito um cast implicito para o tipo da collection.
Por isso que qdo impresso o valor do atributo a, será exibido o conteudo atribuido na classe A.
a saida sera :
A
A
se estes ojetos fossem incluids diretamente na collection l, a saida seria diferente, como segue abaixo:
A
B
pois a collection l é tipada com td que estenda A.
class A {
String a = "A";
void metodo(){
System.out.println(a);
}
}
class B extends A {
String a = "B";
void metodo(){
System.out.println(a);
}
}
public class Teste {
public static void main(String[] args) {
ArrayList<A> a = new ArrayList<A>();
a.add(new A());
a.add(new B());
List<? extends A> l = a;