POLIMORFISMO - Dúvida

5 respostas
MrDataFlex

Bom pessoal, tenho o seguinte código:

public class teste {
    interface Operavel {
        double calcular(double x, double y);
    }
    public class Soma implements Operavel {
    public double calcular(double x, double y) {
         return x+y;
     }       
    }
    public class Subtrai implements Operavel {
     public double calcular(double x, double y) {
         return x-y;
     }   
    }
    /** Creates a new instance of teste */
    public void mostraCalculo(Operavel o, double x, double y) {
        System.out.println(o.calcular(x,y));
    }
    public teste() {
        mostraCalculo(new Soma(),10,10);
        mostraCalculo(new Subtrai(), 10,5);
    }
    
    public static void main(String args[]) {
        teste t = new teste();
    }
    
}

é um exemplo de polimorfismo, utilizando interface sendo a classe mãe, ai está uma das dúvidas.

Isso também funcionaria, se eu utilizasse:
- Classe abstrata
- Classe normal

Então, o que devo usar, para ser a classe mãe em um caso de polimorfismo?

Outra dúvida: Qual a diferença entre polimorfismo estático e dinâmico?

Um abraço!

5 Respostas

analyser

Olá, se eu estiver errado me corrigam

Bem isso sim é um exemplo de polimorfismo, mais um polimorfismo obrigatório, pois quando vc implementa uma interface vc esta tipo “assinando um contrato” dizendo que irá implementar os metodos da interface, sendo assim acredito que ela não seja sua classe mae (super classe), ela é a interface, agora quando vc utilizar classes abstratas ou classes normais, ai sim é um polimorfismo com uma super classe que é a classe que será extendida (extends), agora polimorfismo dinamico e estatico nunca ouvi falar.

Abraços

T

http://www.create.ucsb.edu/~xavier/Thesis/html/node12.html
http://csis.pace.edu/~bergin/patterns/polymorphism.html

MrDataFlex

desculpe, mas eu ñ entendo ingles…

obrigado por qm respondeu.

lmprates

aconselho estudar inglês, pois existe muito material sobre java, e de ótima qualidade em inglês. Já em português, nem tanto assim.

sergiotaborda

Não ha uma padrão para o que vc deve utilizar. Qualquer uma das possibilidades é aceitável. Mas…
Se o objeto não tem estado, como o seu Operavel o normal é ser uma interface. Se o objeto tem estado será uma classe. Ser abstrata ou não é uma decisão de implementação e nada mais.

Polimorfismo dinâmico é esse em que vc usa objetos de um tipo e os atribui a variáveis de outro tipo compativel. Exemplo: Operavel o = new Soma();
Outro tipo de polimorfismo dinâmico é o auto-boxing, em que tipos primitivos são entendidos como objetos e vice-versa , de forma automática. Exemplo: Integer n = 2;

Polimorfismo estático é a capacidade de declarar métodos com formas diferentes (mesmo nome, parametros diferentes) - isto é conhecido como sobrecarga (overloading)
e variáveis com formas diferentes (mesmo nome e tipo, escopos diferentes) - isto é conhecido como shadowing. Shadowing pode ser perigoso se não se tomar atenção, mas sobrecarga é bastante comum usar.

Criado 11 de julho de 2007
Ultima resposta 11 de jul. de 2007
Respostas 5
Participantes 5