Uma subclasse s pode herdar de uma nica superclasse
diretamente
Java suporta a noo de interfaces a fim de oferecer uma
funcionalidade semelhante a herana mltipla
A palavra-chaveextends utilizada na definio de uma classe para
indicar que ela herda de outra classe
public class PessoaFisica extends Pessoa { ... }
3. Herana
O conceito de herana define uma hierarquia de classes em
Java
A classeObject , que definida no pacotejava.lang , a classe
raiz da hierarquia de classes
Exceto a classeObject , toda classe em Java possui uma
superclasse
Todos os mtodos definidos na classeObjectpodem ser invocados
por qualquer objeto Java
Uma subclasse no tem acesso direto aos membros privados de sua
superclasse
Todo objeto de uma subclasse tambm um objeto de sua
superclasse
4. Herana 5.
Membros privados de uma superclasse no podem ser acessados por
uma subclasse.
Para chamar um construtor da superclasse utilize
apalavra-chavesuper.
O uso desuperpara invocar o construtor de uma superclasse
anlogo ao uso dethis .
supers pode ser usado dentro de um construtor.
A chamada ao construtor da superclasse deve aparecer como o
primeiro comando dentro de um construtor.
Java assegura que todo mtodo construtor invoca um construtor de
sua superclasse.
Se o primeiro comando em um construtor no for uma chamada
explcita para um construtor da superclasse, Java implicitamente
insere a chamadasuper()no incio do construtor da subclasse.
Construtores de Subclasses 6. Construtores de Subclasses
Exemplo
7. Encadeamento de Construtores
O que ocorre quando o construtor de uma classe invocado?
O que isso implica?
O corpo do construtor da classe Object executado primeiro
Depois, o construtor da superclasse executado
Por fim, o construtor da subclasse executado
// Construtor SubClasse() { super() } // Construtor
SuperClasse() { super() } // Construtor Object() { } 8. Construtor
Padro public class Circulo extends Forma { // Suponhamos que a
classe Circulo (subclasse de Forma) // no define nenhum construtor
// Java adiciona o construtor padropublicCirculo() { super ();} }
9. Consideraes Finais sobre Construtores
Se uma classe no define nenhum construtor, Java cria um
construtor pblico para ela ( public )
Classes que no desejam ser instanciadas de forma pblica devem
declarar um construtor protegido ( protected )
Classes que no devem ser instanciadas de forma nenhuma devem
declarar um construtor privado ( private )
10. Sobrescrita de Mtodos
Tambm conhecida comomethod overriding.
Ocorre quando uma subclasse define um mtodo idntico a um mtodo
de sua superclasse
Mtodos idnticos possuem o mesmo nome, tipo de retorno e lista
de parmetros
Utilizado quando o comportamento do mtodo da superclasse no
corresponde ao desejado para o mtodo da subclasse
Sobrescrita de mtodo no tem nada a ver com sobrecarga de
mtodo
11. Sobrescrita de Mtodos
Como garantir que um mtodo de uma superclasse nunca seja
sobrescrito em uma subclasse dela?
Declare o mtodo como final, adicionando a palavra-chavefinalno
prottipo do mtodo
12. Sobrescrita de Mtodos 13. Polimorfismo
Permite que um tipo expresse sua diferena em relao a outro
similar, desde que eles sejam originados do mesmo tipo-base
Completa o trip que define POO, que tambm inclui encapsulamento
e herana
Permite a criao de cdigo extensvel
Permite adio de funcionalidades a uma classe tomando-se por
base um cdigo j existente
Permite separar a interface da implementao
14. Polimorfismo 15. Polimorfismo
Ligao de Chamada de Mtodos (binding)
Conexo de uma chamada de mtodo ao corpo de um mtodo:
Ligao Prvia (early binding)
Quando o binding (processo de ligao) feito antes do programa
ser executado
nica opo disponvel em Pascal e C
Ligao Tardia (late binding ou dynamic binding)
Quando o binding (processo de ligao) feito durante a execuo do
programa
No se pode determinar, em tempo de compilao ou linkagem, que
mtodo deve ser executado para uma chamada de mtodo
Disponvel em linguagens como C++ e Java
16. Polimorfismo
Toda chamada de mtodo em Java utiliza ligao tardia, a no ser
que o mtodo seja declarado comofinal
O programador no precisa se preocupar com que tipo de ligao ser
utilizada
Java descobre o tipo do objeto a que se destina a mensagem
(invocao de mtodo) e executa o corpo de mtodo apropriado para o
tipo do objeto
O programador escreve cdigo para a classe-base e sabe que, para
todas as subclasses, ele ser executado corretamente