Sunteți pe pagina 1din 4

Herança e Polimorfismo

João Ferreira

Robson Godoi

ilostmy.info

Herança Restrição:
Herança
Restrição:

– Uma classe pode estender apenas uma superclasse diretamente (não existe Herança Múltipla em Java)

Representação gráfica da herança:

Superclasse Funcionario Subclasse Gerente
Superclasse
Funcionario
Subclasse
Gerente

Toda Gerente é um Funcionário, mas nem

Todo Funcionário é um Gerente!
Todo Funcionário é um Gerente!

Herança

O mecanismo de herança permite reutilizar o código de classes existentes Apenas novos atributos ou

O mecanismo de herança permite reutilizar o código de classes existentes Apenas novos atributos ou métodos precisam ser definidos Herança introduz os conceitos de:

– Superclasse e Subclasse

Reuso de Código:

– Tudo que a superclasse tem, a subclasse também tem

– A definição de Gerente (subclasse) vai fazer uso da definição de Funcionario (superclasse).

também tem – A definição de Gerente (subclasse) vai fazer uso da definição de Funcionario (superclasse).

Herança

Herança Capacidade que uma classe (subclasse) tem de herdar estado (atributos) e comportamento (métodos) de uma

Capacidade que uma classe (subclasse) tem de herdar estado (atributos) e comportamento (métodos) de uma outra classe (superclasse).

Funcionario Superclasse nome matricula dataAdmissao salario imprimeSalario() tempoDeServico() Subclasses Gerente
Funcionario
Superclasse
nome
matricula
dataAdmissao
salario
imprimeSalario()
tempoDeServico()
Subclasses
Gerente
gratificacao
imprimeSalario()

public class Gerente extends Funcionario { … }

tempoDeServico() Subclasses Gerente gratificacao imprimeSalario() public class Gerente extends Funcionario { … }

Herança em Java

Sintaxe: a definição da superclasse é feito com a cláusula extends: public class Gerente extends
Sintaxe: a definição da superclasse é
feito com a cláusula extends:
public class Gerente extends Funcionario
{
//atributos especificos de Gerente
//construtor(es)
//metodos especificos de Gerente
}
Herança Extensibilidade:
Herança
Extensibilidade:

– algumas operações da superclasse podem ser redefinidas na subclasse

Comportamento:

– objetos da subclasse comportam-se como os objetos da superclasse

Princípio da Substituição:

– objetos da subclasse podem ser usados no lugar de objetos da superclasse

– Onde Funcionario é aceito, Gerente também será

da subclasse podem ser usados no lugar de objetos da superclasse – Onde Funcionario é aceito,
Herança Visilibidade: – Atributos e métodos com o modificador protected podem ser acessados na classe
Herança
Visilibidade:
– Atributos e métodos com o modificador protected
podem ser acessados na classe em que são
declarados e nas suas subclasses

• Por isso, quando temos Herança, temos de trocar o qualificador private para protected

Estrutura herdada: atributos e métodos Construtores:

– não são herdados -> precisam ser implementados na subclasse.

– construtores da subclasse “sempre” utilizam algum construtor da superclasse através da cláusula super.

– construtores da subclasse “sempre” utilizam algum construtor da superclasse através da cláusula super.

Herança e a classe Object

Toda classe que você define tem uma superclasse Se não for usado "extends", a classe

Toda classe que você define tem uma superclasse Se não for usado "extends", a classe estende automaticamente a classe "Object" de Java. Ou seja, tudo que criamos é subclasse da classe Object. A classe Object é a única classe de Java que não herda de nenhuma outra classe: é a superclasse de todas as classes de Java.

Object é a única classe de Java que não herda de nenhuma outra classe: é a

Qualificador final em classes

Classes declaradas com o modificador final não podem ter subclasses Usado por segurança ou por

Classes declaradas com o modificador final não podem ter subclasses Usado por segurança ou por eficiência Strings são exemplos de classes final

final não podem ter subclasses Usado por segurança ou por eficiência Strings são exemplos de classes
Construtores e subclasses public class Gerente extends Funcionario{ private double gratificacao; public Gerente (int
Construtores e subclasses
public class Gerente extends Funcionario{
private double gratificacao;
public Gerente (int codigo, String nome,
double salario, double gratificacao)
{
super(codigo, nome, salario);
this.gratificacao = gratificacao;
}
}
A cláusula super chama o construtor da superclasse, no
caso acima, o construtor de Funcionario
se super não for chamado, o
compilador acrescenta uma
chamada ao construtor default:
super()
se não existir um construtor
default na superclasse,
haverá um erro de
compilação

Observações sobre Herança

Ela é transitiva
Ela é transitiva

– Se B herda de A e C herda de B, a classe C vai ter todos os atributos e métodos de A e

B.

Não existe herança múltipla em Java A superclasse tem de ter seus atributos com qualificador protected. Se usar private, dá erro de compilação.

em Java A superclasse tem de ter seus atributos com qualificador protected. Se usar private, dá
Quadrado Círculo Triângulo Polimorfismo Desenhar
Quadrado
Círculo
Triângulo
Polimorfismo
Desenhar

Sobrecarga e Sobreposição

Polimorfismo

Significa usar o mesmo nome para se referir a métodos diferentes ou que se comportam

Significa usar o mesmo nome para se referir a métodos diferentes ou que se comportam de maneira diferente Temos dois tipos de polimorfismo:

– “sobrecarga” (overloading)

– “sobreposição” (overriding)

Temos dois tipos de polimorfismo: – “sobrecarga” (overloading) – “sobreposição” (overriding)

Sobreposição

Conhecido por overriding ou sobreposição. Para que haja a sobreposição de métodos, o novo método

Conhecido por overriding ou sobreposição. Para que haja a sobreposição de métodos, o novo método deve ter a mesma assinatura (nome e parâmetros) que o método da super classe Se o nome for o mesmo, mas os parâmetros forem de tipos diferentes haverá overloading (sobrecarga) e não sobreposição

Se o nome for o mesmo, mas os parâmetros forem de tipos diferentes haverá overloading (sobrecarga)

Sobreposição

Quando se invoca um método da subclasse, a classe que sofreu a invocação procura por

Quando se invoca um método da subclasse, a classe que sofreu a invocação procura por um método que possa ser aplicado. Caso não encontre a procura é repassada para a superclasse. A assinatura dos métodos nos casos de sobreposição DEVE ser a MESMA

a procura é repassada para a superclasse. A assinatura dos métodos nos casos de sobreposição DEVE

Sobrecarga

Possibilidade de uma classe possuir mais de um método ou construtor com mesmo nome, porém
Possibilidade de uma classe possuir mais de
um método ou construtor com mesmo nome,
porém com parâmetros diferentes.
Um objeto pode responder de diferentes
maneiras a um método de mesmo nome
A decisão de qual método chamar é feita em
tempo de execução, dependendo de qual
parâmetro for passado.
2 tipos de sobrecarga: construtor e métodos
Conta
calcularJuros()
calcularJuros(int x)

Sobreposição

A sobreposição só ocorre associada a um caso de herança, ou seja, entre superclasse e
A sobreposição só ocorre associada a
um caso de herança, ou seja, entre
superclasse e subclasse
Ela é usada quando o método que seria
herdado da superclasse não atende aos
requisitos da subclasse e, por isso,
Conta
precisa ser sobreposto.
calcularJuros()
Conta especial
calcularJuros()

Sobreposição

Exemplo: na classe Funcionário public double consultaSalario () { return salario; }
Exemplo: na classe Funcionário
public double consultaSalario ()
{
return salario;
}

Na classe Gerente

public double consultaSalario ()

{

return (salario + gratificacao);

}

return salario; } Na classe Gerente public double consultaSalario () { return (salario + gratificacao); }

Exercício

A partir do sistema bancário anteriormente implementado, crie a classe ContaEspecial que herda de Conta

A partir do sistema bancário anteriormente implementado, crie a classe ContaEspecial que herda de Conta e tem adicionalmente o atributo limiteCredito.

– Faça os ajustes em Conta necessários para haver herança

Os métodos sacar e emitirSaldo origintais de conta devem ser sobrescritos para atender a ContaEspecial (uma vez que tem de ser considerado o limite de crédito). A classe SistemaBancario precisará ser modificada para criar contas especiais

ser considerado o limite de crédito). A classe SistemaBancario precisará ser modificada para criar contas especiais