Usamos a palavra chaveabstractpara impedir a instanciao de uma
classe.
Classes abstratas normalmente possuem um ou mais mtodos
abstratos.
Um mtodo abstrato no possui corpo, apenas define a assinatura
(prottipo) do mtodo
Classes abstratas so teis quando uma classe define mtodos a
serem implementados apenas pelas suas subclasses
3. Classes Abstratas
Regras sobre mtodos abstratos e as classes que os contm:
Toda classe que possui mtodos abstratos automaticamente
abstrata e deve ser declarada como tal.
Uma classe pode ser declarada abstrata mesmo se ela no possuir
mtodos abstratos.
Uma classe abstrata no pode ser instanciada.
Uma subclasse de uma classe abstrata pode ser instanciada
se:
Sobrescreve cada um dos mtodos abstratos de sua
superclasse
Fornece uma implementao para cada um deles
4. Classes Abstratas
Se uma subclasse de uma classe abstrata no implementa todos os
mtodos abstratos que ela herda, ento a subclasse tambm
abstrata
Para declarar um mtodo abstrato coloque a
palavra-chaveabstractno incio do prottipo do mtodo
Para declarar uma classe abstrata coloque a
palavra-chaveabstractno incio da definio da classe
5. Classes Abstratas public abstract classConta { protected
double saldo ; public voidretira( doublevalor) { this . saldo-=
valor; } public voiddeposita( doublevalor) { this . saldo+= valor;
} public doublegetSaldo() { return this . saldo ; } public abstract
voidatualiza(); } 6. Interfaces
Problema
Suponha que voc define as classes abstratasFormaeDesenhavele a
classeCirculo(que estendeForma )
Como criar a classeCirculoDesenhavelque ao mesmo
tempoCirculoeDesenhavel ?
public classCirculoDesenhavel
extendsCirculo, Desenhavel { ... }
Mas... o cdigo acima est ERRADO!
Java, diferentemente de C++, no permite que uma classe possua
duas superclasses diretas, ou seja, no suporta herana mltipla!
7. Interfaces
Soluo
Para resolver esse tipo de problema Java define o conceito de
interfaces
Uma interface semelhante a uma classe abstrata, exceto pelo
fato de utilizar a palavra chaveinterfaceno lugar deabstract
classna definio da classe.
Interface um contrato onde quem assina se responsabiliza por
implementar os mtodos definidos na interface (cumprir o
contrato).
Ela sexpe o que o objeto deve fazer ,e no como ele faz ,nem o
que ele tem .Comoelefazvai ser definido em umaimplementaodessa
interface.
8. Interfaces
Quais as diferenas entre interface e classe abstrata?
Declarao de mtodos
Em uma classe abstrata podem ser definidos mtodos abstratos e
no-abstratos
Todos os mtodos de uma interface so implicitamente
abstratos
Declarao de variveis
Em uma classe abstrata podem ser definidas variveis de
instncia, de classe e constantes
Todos os atributos de uma interface so semprepublic static
final(constantes), mesmo que essas palavras reservadas no sejam
usadas.
9. Interfaces 10. Interfaces public interfaceAutenticavel {
public booleanautentica( intsenha); }
classGerenteextendsFuncionarioimplementsAutenticavel { private int
senha ; // outros atributos e mtodos public booleanautentica(
intsenha) { if( this . senha!= senha) { return false ; } // pode
fazer outras possiveis verificacoes, // como saber se esse
departamento do // gerente tem acesso ao Sistema return true ; } }
11. Herana entre Interfaces
Diferentemente das classes, uma interface pode herdar de mais
de uma interface.
como um contrato que depende de que outros contratos sejam
fechados antes deste valer.
Voc no herda mtodos e atributos, e sim responsabilidades.
12. Para que usar interfaces?
Para deixar o cdigo mais flexvel, e possibilitar a mudana de
implementao sem maiores traumas.
Elas tambm trazem vantagens em no acoplar as classes.
Uma vez que herana atravs de classes traz muito acoplamento,
muitos autores clssicos dizem que em muitos casos herana quebra o
encapsulamento.
13. Interfaces 14. Interfaces packagejava.io; public
interfaceSerializable { } 15. Interfaces packagejava.lang;
importjava.util.*; public interfaceComparable { public
intcompareTo(T o); } 16. Interfaces packagejava.util; public
interfaceCollectionextendsIterable { intsize(); booleanisEmpty();
booleancontains(Object o); // ... booleanadd(E e);
booleanremove(Object o); // ... voidclear(); // ... } 17.
Interfaces packagejava.util; public interfaceListextendsCollection
{ // ... intindexOf(Object o); intlastIndexOf(Object o); // ... }
18. Interfaces packagejava.sql; public interfaceWrapper { T
unwrap(java.lang.Class iface)throwsjava.sql.SQLException;
booleanisWrapperFor(java.lang.Class
iface)throwsjava.sql.SQLException; } 19. Interfaces
packagejava.sql; importjava.util.Properties; public
interfaceConnectionextendsWrapper { // ...
voidcommit()throwsSQLException; voidrollback()throwsSQLException;
voidclose()throwsSQLException; // ... int TRANSACTION_NONE = 0; int
TRANSACTION_READ_UNCOMMITTED= 1; int TRANSACTION_READ_COMMITTED =
2; int TRANSACTION_REPEATABLE_READ = 4; int
TRANSACTION_SERIALIZABLE = 8; // ... } 20. Regras de Ouro
No livro Design Patterns, logo no incio os autores citam 2
regras de ouro: