Existem várias classificações e tipos de polimorfismo. C++ apresenta vários tipos de
polimorfismo . Java apresenta um conjunto mais reduzido evitando principalmente polimorfismos ad-hoc.
REDEFINIÇÃO DE MÉTODOS PARA UMA CLASSE HERDEIRA
Trata-se de um polimorfismo, pode serclassificado como polimorfismo de inclusão. Um método é uma redefinição de um método herdado, quando está definido em uma classe construída através de herança e possui o mesmo nome, valor de retorno e argumentos de um método herdado da classe pai. A assinatura do método tem que ser idêntica, ou seja, teremos redefinição quando uma classe filha fornece apenas uma nova implementação para o método herdado e não um novo método.
Se a classe filha fornecer um método de cabeçalho ou assinatura parecida com a do método
herdado (difere ou no número ou no tipo dos argumentos, ou então no tipo do valor de retorno)
então não se trata mais de redefinição, trata-se de uma sobrecarga, pois criou-se um novo método.
Uma chamada ao método herdado não mais é interceptada por esse novo método de mesmo nome.
O método tem o mesmo nome, mas é ligeiramente diferente na sua assinatura (o corpo ou bloco de código {} não importa), o que já implica que não proporciona o mesmo comportamento
(behaviour) do método da superclasse.
SOBRECARGA ( MÉTODOS E OPERADORES)
- SOBRECARGA DE MÉTODOS
Este tipo de polimorfismo permite a existência de vários métodos de mesmo nome, porém
com assinaturas levemente diferentes ou seja variando no número e tipo de argumentos e no valor de retorno. Ficaria a cargo do compilador escolher de acordo com as listas de argumentos os procedimentos ou métodos a serem executados.
- SOBRECARGA DE OPERADOR
Java não fornece recursos para sobrecarga de operador, o que é perfeitamente condizente
com a filosofia da linguagem. Seus criadores que acreditavam que a linguagem deveria ser
pequena, simples, segura de se programar e de se usar (simple, small, safe and secure).
A ausência de sobrecarga de operadores pode ser contornada definindo apropriadamente
classes e métodos.
CLASSES ABSTRATAS
Classes abstratas são poderosas, elas permitem: criação de listas heterogêneas, ocorrência de
“dynamic binding” e maior clareza no projeto de sistemas. Os packages que vem com a linguagem estão repletos de exemplos de classes abstratas.
Métodos abstratos, obrigatoriamente pertencem a classes abstratas, e são métodos desprovidos
de implementação, são apenas definições que serão aproveitadas por outras classes da hierarquia.
Exemplo de classe abstrata:
abstract class Forma {
protected float x,y; //visivel hierarquia abaixo
public void move(float dx,float dy)
{
this.x+=dx; this.y+=dy;
}
abstract public void mostra( ); //metodo abstrato
}
//Classe ponto
class Ponto extends Forma {
public Ponto(float ax,float ay) //omita o valor de retorno!
//garante o estado do objeto
{
this.x=ax; this.y=ay;
}
//move nao precisa ser redefinido
public void mostra()
{
System.out.println("("+this.x+","+this.y+")");
}
}
Classes abstratas X Interfaces:
Você deve estar achando que classes abstratas e interfaces são conceitos parecidos e que
podem ser usados com objetivos semelhantes. Cuidado! Uma classe pode estender uma única classe (que pode ser abstrata ou não), mas pode implementar várias interfaces. Além disso, interfaces não permitem declaração de atributos, enquanto que classes abstratas permitem. Interfaces estão mais ligadas a comportamento, enquanto que classes abstratas estão mais ligadas a implementação.
Nenhum comentário:
Postar um comentário