Buscar

Polimorfismo

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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:

Continue navegando