[b][i][color=darkblue] [/color][size=18] [/size]Bom estou precisando de algum material que possa explicar com exemplos este assunto ainda que eu não consegui apreender>>>polimorfismo>>.>>.
busque apostilas da caelum ou do própio tutorials sun.
explicação rapida…
Polimorfismo é o que faz vc em java definir que um objeto pode ter muitas formas, e o que diabos é isso ??
Imaginemos o eguinte cenário … Veículo, quando vc pense em veículo, pode pensar em varios tipos de veículo, por exemplo, Moto, Carro, Helicoptero … todos são veículos de locomoção … o que eles tem em comum ? digamos que todos eles possam se locomover de um ponto A para um ponto B … e que todos ele são Objetos Aceleraveis (ou seja suas velocidades podem ser aumentadas e diminuidas) …
Então como seria Um Objeto Veículo em nosso modelo ??
[code]public class Veiculo implements Aceleravel {
private Ponto atual;
private int velocidade = 10; //velocidade incial
public Veiculo(Ponto inicial) { this.atual = inicial; }
public Date calculaTempoPara(Ponto b) {
//calcula q horas vai chegar no ponto b, e retorna a data
}
public void acelerar(int valor) {
velocidade += valor; //aumenta ou diminui a velocidade, de acordo com o sinal de "valor"
}
}[/code]
Agora explicando o que seria implements Aceleravel, é uma interface, que diz que este objeto, é um tipo de objeto capaz de acelerar, varios objetos tem esse comportamento, e ele não precisa necesariamente ser um veiculo para poder acelerar, liquidificadores podem, cortadores de grama, carros, motos, barcos, pessoas e etc… Aceleravel é uma das formas de polimorfismo e que dizer um comportamento que é dado por uma interface…
public interface Aceleravel {
public void acelerar(int valor);
}
ou seja, qualquer objeto pode se declarar Aceleravél! para tal ele precisa implementar a interface e assim escrever o método acelerar(int valor) e nele definir como o objeto em questão acelera…
no nosso exemplo todos os nossos veiculos tem essa capacidade, de acelerar, e protanto o objeto veiculo implementa essa caracteristica…
…
Agora nos temos varios outros veiculos, que não vamos nos aprofundar neles, esse veiculos são carros, motos e helicoptros
public class Moto extends Veiculo {
//... propriedade e métodos apenas de Moto
public void impinar() { ... }
}
public class Helicoptoro extends Veiculo {
//... propriedades e métodos apenas de Helicoptoro
public void lenvatarVoo() {...}
}
public class Carro extends Veiculo {
//... propriedades e métodos apenas de Carro
public void cavaloDePau() {...}
}
…
Nossos 3 veiculos estão definidos, e tem propriedades proprias… o polimorfismo para java é dizer que o Carro não é apenas um Objeto carro, ele é tb um Objeto Veiculo (o que recebe via herança) assim como tem tb um comportamento de um objeto Acelerável … sendo assim eu posso fazer
Carro meuCarro = new Carro(pontoInicial);
Veiculo meuVeiculo = new Carro(pontoInicial);
Aceleravel meuAceleravel = new Carro(pontoInicial);
Object meuObjeto = new Carro(pontoIncial);
o Carro aceita todas essas formas defindas acima, por conta do seu polimorfismo definido pela suas heranças e implementações…
o fato é quando eu subo na cadeia eu não consigo enxergar os métodos especializados do carro, por exemplo
meuVeiculo.calculaTempoPara(pontoFInal); //isso é possivel
meuVeiculo.cavaloDePau(); //isso não é possivel ...
mesmo sendo o meuVeiculo um carro, eu não posso dar um cavalo de pau em qualquer veiculo, so posso dar um cavalo de pau em um carro, sendo assim, quando vc olha para a forma de Veiculo, vc não encherga as formas abaixo na cadeia de herança, mesmo que o objeto dentro da variável seja um carro… ate pq ele podia não ser
meuVeiculo = new Helicoptoro(pontoInicial); //pronto o meuVeiculo passou a ser um helicoptoro...
usando novamente o polimorfismo, digamos que que tenha uma lista dos meus veiculos no ponto inicial…
[code]Veiculo[] veiculos = new Veiculo[3];
veiculos[0] = new Carro(pontoInicial);
veiculos[1] = new Helicoptoro(pontoInicial);
veiculos[2] = new Moto(pontoInicial);[/code]
já que todos são veiculo eu posso calcular o tempo de cada um ate um ponto final
for (int i = 0; i < veiculos.length; i++) {
System.out.println(veliculos[i].calculaTempoPara(pontoFinal));
}
ja que todos acima estão na forma de veículo…
posso ter uma lista de objetos capazes de acelrar, e poso querer acelarar todos meus objetos da minha lista em 10 … (suponha que Liquidificador tb implemente Aceleravel)
[code] Aceleravel[] aceleraveis = new Aceleravel[4];
aceleraveis[0] = new Carro(pontoInicial);
aceleraveis[1] = new Helicoptoro(pontoInicial);
aceleraveis[2] = new Moto(pontoInicial);
aceleraveis[3] = new Liquidificador();
for (int i = 0; i < aceleraveis.length ; i++) {
aceleraveis[i].acelerar(10);
}[/code]
mesmo sendo um Liquidificador algo totalmente diferente de um Carro, como todos estes objetos podem assumir a forma de um objeto Aceleravel, eu sou capaz de guarda-los em uma lista de aceleraveis e usar os métodos da interface de Aceleravel
…
Espero ter ajudado ^^
Ô caba arretado! Deu uma aula de polimorfismo
\o/ a intenção é ajudar ^^
hihihi cabei de ler denovo… ta xeio de erro de portugues o.O …
mas valeu o comentário
…
o pior é que comecei o post com uma mentira ahuauha
acabou se extendendo muito a resposta