Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Polimorfismo - Java

Deixa eu ver se entendi.

Polimorfismo seria tipo, em um exemplo prático cada carro tem seu ipva, ano, valor, modelo.Mas no caso do ipva, há um cálculo levando em consideração ano, modelo, etc.Polimorfismo então seria as diversas possibilidades de se tratar isto para vários modelos de carros diferentes ?

Desde já agradeço.

1 resposta
solução!
interface Imposto{

 public double calcula(double valor);

}

class ICMS implements Imposto{
  public double calcula(double valor){
      return valor*1.05;
  }
}

class ISS implements Imposto{
  public double calcula(double valor){
      return valor*1.10;
  }
}

class CalculadoraDeImpostos{
  public double calculaImpostoSobre(double valor,Imposto imposto){
    return imposto.calcula(valor);
  }
}

public class TestaImpostos{

 public static void main(String [] args){

    Imposto icms = new ICMS();
        ISS  iss = new ISS();

    CalculadoraDeImpostos calculadora = new CalculadoraDeImpostos();

    double valorCompra = 100; 
    valorCompra = calculadora.calculaImpostoSobre(valorCompra,icms);
    System.out.println("valor com icms :" + valorCompra );    
    valorCompra = calculadora.calculaImpostoSobre(valorCompra,iss);
    System.out.println("valor com iss :" + valorCompra );


 } 

}

Poliformismo é a capacidade de referenciar objetos de uma classe de outras formas. No exemplo a seguir, é definido a interface Imposto ,ICMS e ISS que são classes que implementam , e uma classe CalculadoraDeImpostos para a contabilização dos impostos através do método calculaImpostoSobre(valor,imposto) que espera receber um valor e o imposto a ser aplicado.

Na classe de testes é criado um objeto para cada tipo de imposto (icms,iss), mas perceba que referencio esses objetos de formas diferentes. O objeto icms é referenciado pelo o tipo definido na interface(Imposto), enquanto que o objeto iss é referenciado pela a sua classe concreta(ISS).

Qual é a vantagem disso? Perceba que o método calculaImpostoSobre espera um Imposto , e as classes ICMS e ISS são Impostos, então posso passar qualquer classe que seja subtipo de Imposto, tanto as existentes , como as futuras classes que possam existir sem nenhuma alteração no método calculaImpostoSobre.