Polimorfismo e Generics

voltar

 
 

Exemplo 1)

 
 

import java.util.List;

import java.util.ArrayList;

class Pai{}

class Filha extends Pai{}

public class GenTest {

public static void main(String args[]){

List<? extends Pai> lst = new ArrayList<Filha>();

//lst.add(new Pai());

//lst.add(new Filha());

 
 

List<Filha> lstF = new ArrayList<Filha>();

lstF.add(new Filha());

lst = lstF;

for (Filha filha: lstF)

System.out.println(filha.getClass().getSimpleName());

 
 

List<Pai> lstP = new ArrayList<Pai>();

lstP.add(new Pai());

lst = lstP;

for (Pai pai : lstP)

System.out.println(pai.getClass().getSimpleName());

}

}

Output:

Filha

Pai

_____________________________________________________________________________________________________

 
 

Exemplo 2)

 
 

public class GenTest2 {

public static void main(String args[]) {

Politico<Senador> sen = new Politico<Senador>(new Senador());

System.out.println(sen.getPolitico().falar());

Politico<Prefeito> pref = new Politico<Prefeito>();

pref.setPolitico(new Prefeito());

System.out.println(pref.getPolitico().discursar());

}

}

 
 

class Politico<T> {

private T politico;

public Politico(){};

public Politico(T politico){

this.politico = politico;

}

public T getPolitico() {

return this.politico;

}

public void setPolitico(T politico){

this.politico = politico;

}

}

 
 

class Senador {

public String falar(){

return “Senador…”;

}

}

 
 

class Prefeito{

public String discursar(){

return “Prefeito…”;

}

}

 
 

Output:

Senador…

Prefeito…

 
 

_____________________________________________________________________________________________________

 
 

Exemplo 3)

 
 

 
 

public class GenTest2 {

public static void main(String args[]) {

Politico<? extends Falador> pol1 = new Politico<Senador>(new Senador());

pol1.getPolitico().falar();

Politico<? extends Falador> pol2 = new Politico<Prefeito>(new Prefeito());

pol2.getPolitico().falar();

//Politico<? extends Falador> pol3 = new Politico<? extends Falador>(new Senador());

//Cannot instantiate the type Politico<? extends Falador>

}

}

 
 

class Politico<T> {

private T politico;

public Politico(){};

public Politico(T politico){

this.politico = politico;

}

public T getPolitico() {

return this.politico;

}

public void setPolitico(T politico){

this.politico = politico;

}

}

 
 

interface Falador {

void falar();

}

 
 

class Senador implements Falador {

public void falar(){

System.out.println(“Senador…”);

}

}

 
 

class Prefeito implements Falador {

public void falar(){

System.out.println(“Prefeito…”);

}

}

Output

Senador…

Prefeito…

 
 

___________________________________________________________________________________________________

 
 

Exemplo 4) voltar

 
 

Neste exemplo ilustra o erro ocorrido devido a tentar inserir um objeto do tipo Dog em uma array de Cat.

 
 

 
 

package pcx;

abstract class Animal{}

 
 

class Dog extends Animal{

@Override

public String toString() {

return “Dog”;

}

}

class Cat extends Animal{

@Override

public String toString() {

return “Cat”;

}

}

public class GenTest2 {

public static void main(String args[]){

Cat cats[] = {new Cat(),new Cat()};

checkAnimal(cats);

}

public static void checkAnimal(Animal animals[]){

// Veja que animals[] está referenciando no Heap uma array de Cat.

animals[0] = new Dog(); // Tentando colocar um objeto Dog em uma array de Cat.

}

}

 
 

Output:

Exception in thread “main” java.lang.ArrayStoreException: pcx.Dog

at pcx.GenTest2.checkAnimal(GenTest2.java:22)

at pcx.GenTest2.main(GenTest2.java:19)

 
 

 
 

 
 

 
 

Esta entrada foi publicada em Generics com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s