Você está na página 1de 22

Linguagem de Programao

EDUARDO LUIZ PARETO


Rio de Janeiro, 7 de setembro de 2011

Aula 5
Herana
Objetivos 1. Apresentar os conceitos de Herana 2. Criar e manipular classes e objetos que se relacionem atravs de herana

3. Sobrecarga de mtodos
4. Utilizar interfaces grficas interagindo com objetos e classes previamente definidos;

Herana
Significa a capacidade de incorporar as caractersticas e as funcionalidades de uma classe. Assim como a herana de todas as operaes e dados, voc pode especializar mtodos da super classe e especificar novas operaes e dados, para refinar, especializar, substituir ou estender a funcionalidade da classe progenitora.

Herana
Uma classe define um conjunto de dados Atributos e um conjunto de mtodos Todos os objetos de uma classe mantm o mesmo conjunto de atributos e mtodos. Atravs do mecanismo de herana, tendo definido uma classe base possvel criar classes derivadas que:
herdam os atributos e mtodos da classe base definem novos atributos e mtodos podem redefinir os mtodos herdados
4

Herana

Terminologias
Estender Criar uma nova classe que herda todo o contedo da classe existente. Superclasse Uma classe progenitora ou base. Subclasse Uma classe filha que herda ou estende uma superclasse

Classe Abstrata
Uma classe abstrata em Java define atributos e mtodos. Numa classe abstrata, um mtodo pode ser definido com o modificador abstract. Nesse caso:
A classe abstrata no implementa os mtodo abstratos. As classes derivadas devem implementar os mtodos abstratos.

Uma classe abstrata utilizada quando deseja-se fornecer uma interface comum a diversos membros de uma hierarquia de classes. Os mtodos declarados na classe abstrata sero implementados em suas subclasses, atravs de polimorfismo. Imagine uma classe que no seu sistema, a uma funcionalidade existente em todas as subclasses quer ser apresentada na superclasse. Este mtodo definido na superclasse como Abstract. Nas subclasses, estes mtodos sero implementados, cada um com a sua peculiaridade.
7

Notas importantes
Como visto anteriormente, subclasses podem redefinir (sobrepor) um mtodo de sua superclasse. Para indicar que um mtodo de uma classe deve necessariamente ser redefinido em cada uma de suas subclasses devemos usar o modificador abstract. Uma classe que contm um ou mais mtodos abstratos deve ser declarada explicitamente como abstrata. Essa classe, no entanto, pode ter construtores e mtodos concretos (no-abstratos). Se uma classe declarada como abstract, no podem ser criados objetos desta classe.

Notas Importantes
Se uma subclasse derivada de uma superclasse que contm um mtodo abstrato e se esse mtodo abstrato no for redefinido na subclasse, esse mtodo permanece abstract na subclasse. Com isso, a subclasse dever ser declarada explicitamente como abstract. Declarar um mtodo como abstrato uma forma de obrigar o programador a redefinir esse mtodo em todas as subclasses para as quais se deseja criar objetos. Como um mtodo abstrato deve ser redefinido nas subclasses, na superclasse ele no precisa ter implementao alguma.

Exemplo

10

Vamos imaginar a seguinte hierarquia de classes:

onde Chefe, PorComissao, PorItem e PorHora so classes finais. Todas essas subclasses vo precisar redefinir o mtodo ganha(). Como se tratam de tipos diferentes de empregado, cada um ganha de uma forma:
Chefe: salrio fixo e predefinido; PorComissao: valor fixo + comisso * vendas; PorItem: valor por produo * quantidade produzida; PorHora: valor por hora * total de horas trabalhadas.

11

Chefe.java

12

PorComissao.java

13

PorItem.java

14

PorHora.java

15

Programa para testar

16

Polimorfismo
a capacidade que os mtodos de mesmo nome tm de efetuarem tarefas diferentes. O mesmo mtodo com vrias formas. Acontece de duas maneiras em Java: quando os mtodos so definidos em funo da classe que os utiliza (sobreposio) ou dos diferentes conjuntos de argumentos definidos para cada mtodo (sobrecarga). Uso do this
Chamada para outro construtor da mesma classe. um excelente artifcio para combinar cdigo dos construtores.
17

Exemplo
public class Cliente () { private String nome; //campo de instncia private int numConta; //campo de instancia public Cliente(String n, int c) //Construtor da Classe { nome = n; numConta = c; } }

18

Exemplo
public class Cliente ( ) { private String nome; //campo de instncia private int numConta; //campo de instancia public Cliente(String n) //Construtor 1 da Classe Cliente { this(n, 0) //Chama o Construtor 2 da prpria classe } public Cliente(String n, int c) { nome = n; numConta = c; } public int getNumConta () { return numConta; } public void setNumConta (int numero) { numConta = numero; } }

19

Exemplo
public class ClienteOuro extends Cliente { private double limiteChequeEspecial; //Atributo da Classe public ClienteOuro (String n, int c, double limite) { super(n, c ); //precisa ser primeiro comando mtodo limiteChequeEspecial = limite; }

}
20

Exerccio
Faa um programa com uma interface grfica para criar o objeto Cliente Faa outro programa com outra interface grfica para criar o ClienteOuro

Para ambos exerccios utilize o Jframe para construir as interfaces. Crie as classes isoladamente em arquivos separados.
21

Fim!

22