Você está na página 1de 2

Pgina 1 de 2

Fonte: Introduo Programao Orientada a Objetos usando Java


Autor: Rafael Santos
Fazer um resumo do captulo 9
Implementar todos os exemplos desse captulo
Apresentar o trabalho no laboratrio

9.2 Classes abstratas


O primeiro mecanismo de criao de superclasses com declaraes mas sem
denies de mtodos permite a criao mtodos declarados como abstratos. Mtodos
abstratos so somente declarados (com seu nome, modicadores, tipo de retorno e lista
de argumentos), no tendo um corpo que contenha os comandos da linguagem que este
mtodo deva executar. Se uma classe contm um mtodo declarado como abstrato, as
classes que herdarem desta devero obrigatoriamente implementar o mtodo abstrato
com o nome, modicador, tipo de retorno e argumentos declarados na classe ancestral
Mtodos abstratos so declarados com o modicador abstract. Se uma classe tiver
algum mtodo abstrato, a classe tambm dever obrigatoriamente ser declarada com o
modicador abstract. Uma classe tambm pode ser declarada abstrata mesmo que
nenhum mtodo tenha sido explicitamente declarado como abstrato. Uma classe que
herde de uma classe abstrata dever, obrigatoriamente, implementar todos os mtodos
declarados como abstratos na classe ancestral, se houverem mtodos abstratos na classe
ancestral. Caso no hajam, nenhuma implementao ser obrigatria.
Curiosamente, classes abstratas podem ter mtodos declarados como estticos,
contanto que estes no sejam abstratos. Mtodos estticos de classes abstratas podem
ser executados da mesma forma que mtodos estticos comuns.
Mtodos podem ter como tipo de retorno instncias de classes abstratas, contanto que
retornem classes no-abstratas que herdam da classe declarada como tipo de retorno do
mtodo.
Por exemplo, a classe abstrata RoboAbstrato (listagem 9.1) poderia ter um mtodo
public RoboAbstrato clona, sem que isto caracterize um erro ou incoerncia. Mesmo que
seja impossvel criar uma instncia da classe RoboAbstrato para retorn-la como
resultado do mtodo clona, uma classe herdeira e no-abstrata poderia implementar
omtodo e retornar uma instncia de si mesma. Por exemplo, consideremos que a classe
RoboSaltador herde da classe abstrata RoboAbstrato e implemente o mtodo public
RoboAbstrato clona, retornando uma nova instncia de RoboSaltador como resultado do
mtodo. Desta forma o mtodo seria vlido, e estaria retornando uma instncia vlida de
uma classe que -um-tipo-de uma classe abstrata.

Pgina 2 de 2

9.3 Interfaces
Vimos que classes abstratas podem conter mtodos no-abstratos que sero
herdados e podero ser utilizados por instncias de classes herdeiras. Se a classe no
tiver nenhum mtodo no abstrato, podemos cri-la como uma interface, que segue um
modelo de declarao diferente do usado para classes mas tem funcionalidade similar a
de classes abstratas.
Assim como uma classe abstrata, uma interface no pode ser instanciada. Todos os
mtodos na interface so implicitamente abstract e public, e no podem ser declarados
com seus corpos.
Campos, se houverem, sero implicitamente considerados como static e final,
devendo, portanto, ser inicializados na sua declarao.
A diferena essencial entre classes abstratas e interfaces que uma classe herdeira
somente pode herdar de uma nica classe (abstrata ou no), enquanto que qualquer
classe pode implementar vrias interfaces simultaneamente. Interfaces so, ento, um
mecanismo simplicado de implementao de herana mltipla em Java, permitindo que
mais de uma interface determine os mtodos que uma classe herdeira deve
implementar.
Interfaces tambm podem ser teis para implementar bibliotecas de constantes: j
que todos os campos de uma interface devem ser declarados como static e final,
podemos escrever interfaces que somente contm campos, e qualquer classe que
implementar esta interface ter acesso a estes campos.