Post on 22-Apr-2015
Polimorfismo
Objetivos
• Conceito de polimorfismo
• Métodos sobrescritos (override)
• Classes abstratas
• Métodos abstratos
Polimorfismo
Termo que caracteriza várias formas
Polimorfismo
Princípio pelo qual, a partir de uma subclasse, criam-se (instanciam-se)
objetos utilizando referências do tipo de uma superclasse.
Uso do Polimorfismo
• Sobrescrita de métodos (override)
• Métodos declarados na superclasse sendo redefinidos na subclasse com a mesma assinatura.
• Alterar o comportamento do método em uma subclasse.
Exemplo
Superclasse Desenho
Subclasses Quadrado e Triangulo.
Quadrado e Triangulo são
especializações da classe Desenho.
public class Desenho {
public void imprime ()
{
System.out.println("Figura não especificada");
}
}
public class Triangulo extends Desenho {
public void imprime ()
{
System.out.println("imprimindo triangulo");
}
}
public class Quadrado extends Desenho {
public void imprime ()
{
System.out.println("imprimindo quadrado");
}
}
public class Main {
public static void main(String[] args) {
int i;
Desenho AR[ ] = new Desenho[6];
AR[0] = new Desenho();
AR[1] = new Triangulo();
AR[2] = new Quadrado();
AR[3] = new Quadrado();
AR[4] = new Triangulo();
AR[5] = new Triangulo();
for (i=0; i<6; i++){
AR[i].imprime();
}
}
Classes Abstratas
• Característica principal: a partir dela não poderá ser feito nenhum tipo de instância.
• Têm em sua declaração um ou mais métodos abstratos.
Declaração de classes abstratas
• Uso da palavra reservada abstract
Declaração de classes abstratas
public abstract class Produto
Métodos abstratos
• Não tem corpo ou implementação e só pode estar numa classe abstrata.
• A classe que estende a classe abstrata é responsável em fazer a implementação dos métodos.
Declaração de métodos abstratos
abstract <tipo de retorno> <identificador>;
ExemploCriar a superclasse abstrata Funcionario com os
atributos nome e email. Criar o
método construtor com parâmetros e o método
abstrato imprime.
Criar a subclasse Medico com os atributos
especialidade e CRM. Elaborar o método
construtor com parâmetros e implementar o
método abstrato imprime.
Criar a subclasse Administrador com os atributos
departamento e numero de funcionarios.
Elaborar o método construtor com parâmetros e
Implementar o método abstrato imprime.
Criar o aplicativo TesteFuncionario.
Instanciar o objeto Medico e o objeto
Administrador. Chamar o método imprime para
cada objeto.
public abstract class Funcionario {
protected String Nome, email;
public Funcionario(String Nome, String email)
{
this.Nome=Nome;
this.email=email;
}
abstract void imprime();
}
public class Medico extends Funcionario {
private int CRM;
private String esp;
public Medico (String n, String e, int CRM, String esp) {
super (n, e);
this.CRM = CRM;
this.esp = esp;
}
public void imprime(){
System.out.println("Medico");
System.out.println("Nome: " + Nome);
System.out.println("Email: " + email);
System.out.println("CRM " + CRM);
System.out.println("Especialidade: " + esp);
}
}
public class Administrador extends Funcionario {
private int numero;
private String depto;
public Administrador (String n, String e, int numero, String depto) {
super (n, e);
this.numero = numero;
this.depto = depto;
}
public void imprime() {
System.out.println("Administrador");
System.out.println("Nome: " + Nome);
System.out.println("Email: " + email);
System.out.println("Numero de funcionarios " + numero);
System.out.println("Departamento: " + depto);
}
}
public class Main {
public static void main(String[] args) {
Medico Med1= new Medico("Plinio", "pl@gmail", 1234, "Oftalmo");
Administrador Adm1 = new Administrador("Maria", "mari@hotmail", 10, "Financas");
Med1.imprime();
Adm1.imprime();
}
}
Exercício
Criar a superclasse abstrata Funcionario com
os atributos protegidos nome e salario. Criar
métodos set e get para nome e salário.
Declarar o método método abstrato reajuste.
Criar a subclasse Vendedor com os atributos
regiao e comissao. Criar os métodos set e
get para região e comissão. Implementar o
método abstrato reajuste acrescentando 10% ao
valor do salario.
Criar a subclasse Secretaria com os
atributos idioma e departamento.
Criar os métodos set e get para idioma e
departamento.
Implementar o método abstrato reajuste
acrescentando 15% ao valor do salario.
Criar o aplicativo TesteFuncionario para
inicializar os atributos, chamar os
métodos reajuste e imprimir.
Exercicio 2Criar a superclasse Conta com o atributo
privado saldo. Elaborar um método construtor
com parâmetros. Definir um método debito
que debite o saldo. Definir um método credito
que credite o saldo. Criar o método get para o
saldo.
Criar a subclasse ContaEspecial com o
atributo privado limite.
Elaborar um método construtor com
parâmetros.
Redefinir o método debito: se o saldo
retornado pelo método get for maior que 0
debitar o valor senão debitar o limite.
Redefinir o método getSaldo retornando o
valor do saldo + o limite.
Criar a subclasse Poupança com o atributo
privado juros.
Elaborar um método construtor com
parâmetros.
Redefinir o método credito da seguinte forma:
O valorCredito = (getsaldo * juros ) + valor
Chamar o método credito da superclasse para
alterar o atributo.
Criar o aplicativo TesteContas.
Instanciar uma conta poupança e uma conta
especial inicializando com o método
construtor com passagem de parâmetros.
Definir um valor para o debito e para o
credito das duas contas.
Imprimir o saldo das duas contas.