Baixe o app para aproveitar ainda mais
Prévia do material em texto
Unidade 3 1 Programação OO em Java Polimorfismo e Sobrecarga de métodos - Voltando ao assunto Herança, veremos um conceito muito importante, o de Polimorfismo. - No nosso exemplo Firma, o vendedor deve ter x% de comissão. Suponha então que seja necessária a construção de um método que calcule o salário de todos os empregados, descontando 15% de imposto. - Por exemplo, se o salário de: Empregado = 200; Vendedor = 200; //Salário-base Tecnico = 2.000; - Supondo uma comissão de 20% , o salário de Vendedor seria: Vendedor = 240; // 200 + 20% = 200 + 40 = 240 - Calculando o salário líquido de cada um: Empregado = 170 // 200-15% = 200-30 Vendedor = 204 // 240-15% = 240-36 Tecnico = 1700 // 2.000-15% = 2.000- 300 - O método para cálculo do salário para a classe Empregado pode ser: public double calc(double sal) { return ( 0.85 * sal ); // desconto de 15% } - E esse método será herdado pela classe Tecnico. Porém, a classe Vendedor deverá implementar seu próprio método: public double calc(double sal) { sal = sal * (1 + comissao/100); //aumento de 20% return ( 0.85 * sal ); //desconto de 15% } - Graficamente, os métodos são representados separadamente dos atributos, na parte inferior: Unidade 3 2 - Desta forma, poderíamos reescrever os códigos para um novo exemplo: public class Empregado { String matricula; String nome; double salario; public double calc (double sal) { return (0.85 * sal); } } Empregado matricula nome salario calc() Vendedor comissao calc() Tecnico titulo Unidade 3 3 public class Vendedor extends Empregado { double comissao; public double calc (double sal) { sal = sal * (1 + comissao/100); return (0.85 * sal); } } - No nosso caso, o método calc efetua um cálculo quando utilizado pelos objetos das classes Empregado e Tecnico, e outro cálculo quando o objeto em questão foi instanciado da classe Vendedor. - Pode-se observar que tanto Empregado como Tecnico utilizam o método calc para cálculo do trabalho, e que Vendedor, apesar de utilizar o método calc, utiliza o seu próprio método, com corpo diferente daquele definido na classe ancestral Empregado. - Resumindo o conceito de Polimorfismo: Reutilização do mesmo nome para um conceito correlato em tipos diferentes. O sistema escolherá qual o método que deve ser utilizado por meio de: o Sobrecarga (Overloading) comparação feita em tempo de compilação que pergunta “Qual método possui os tipos de argumentos correspondentes?” e escolhe o método que será usado. Recurso usado no caso de métodos de mesmo nome, definidos em uma mesma classe, com argumentos diferentes; o Sobreposição (Overriding) comparação feita em tempo de execução que pergunta “Qual método foi definido para este tipo de objeto? Existe uma redefinição deste método na classe do objeto ou deve ser usado o método definido na superclasse?”. Vejamos um primeiro exemplo: suponha que você deseja construir um aplicativo que imprima a área das figuras geométricas “quadrado” e “triângulo eqüilátero”. Definiremos para o exemplo o valor dos lados como 10, para vermos a diferença no valor das áreas calculadas. O primeiro passo é criar as classes (cujos nomes serão: Quadrado e Triangulo), a partir das quais serão gerados os objetos q e t no método main: public class Quadrado { double lado = 0; public double area () //método cálculo da área { return (lado * lado); } } Salve como Quadrado.java mas não compile ainda. Agora, a classe Triangulo: public class Triangulo { double lado = 0; public double area () { return (0.433*lado*lado); } } Unidade 3 4 Salve como Triangulo.java public class Figuras { public static void main (String[] args) { double s; Quadrado q = new Quadrado(); // declarando e inicializando "q" Triangulo t = new Triangulo(); // declarando e inicializando "t" q.lado = 10; //valor do atributo lado do obj “q” s = q.area(); //chamada ao método area do obj “q” System.out.println("Área do Quadrado: "+s); t.lado = 10; //valor do atributo lado do obj “t” s = t.area(); //chamada ao método area do obj “q” System.out.println("Área do Triângulo: "+s); } } Salve como Figuras.java, compile e execute com a classe. Saída:
Compartilhar