Interfaces em Java1 Interfaces Prof. Ricardo Linden. - ppt carregar
PublicouEduardo Oliveira Alterado mais de 7 anos atrás
Apresentação em tema: "Interfaces em Java1 Interfaces Prof. Ricardo Linden."— Transcrição da apresentação:
1 Interfaces em Java1 Interfaces Prof. Ricardo Linden
2 Interfaces em Java2 Da mesma maneira que duas classes são relacionadas se herdam da mesma superclasse, elas também são relacionadas se implementam a mesma interface. Interfaces podem então ser usadas para modelar responsabilidades equivalentes de classes que não possuem nenhum relacionamento ou similaridade. Modela um relacionamento do tipo acts-a Exemplo: carros e brinquedos são bem diferentes, mas ambos podem implementar o método vender(). Interfaces
3 Interfaces em Java3 Interfaces Interface: Mecanismo que objetos não relacionados entre si usam para interagir entre si Consiste em uma série de métodos abstratos e constantes listados para que outras classes as implementem. Uma interface não pode ser instanciada Óbvio, dado que possui métodos abstratos!
4 Interfaces em Java4 Interfaces Interface: Mecanismo javanês para fingir que temos herança múltipla Ao invés de forçar relacionamento que não existem naturalmente entre as classes que fazem parte do sistema, cria-se um protocolo de comunicação Este protocolo é implementado em Java como uma interface contendo um conjunto de constantes e declarações (sem implementações) de métodos É como se fosse um contrato formal entre duas classes na qual uma delas se compromete a implementar certos métodos e ter certos atributos.
5 Interfaces em Java5 Interfaces Interface: Quando uma classe implementa um interface, ela concorda em implementar todos os métodos declarados pela interface Não pode faltar nenhum dos métodos Todos os métodos de uma interface possuem visibilidade pública por default Além dos métodos da interface, pode haver outros métodos dentro da classe Inclusive implementação de outras interfaces!
6 Interfaces em Java6 Interfaces Sintaticamente, uma interface é uma coleção de declarações de métodos sem implementação Uma interface pode também declarar constantes Declaração:
7 Interfaces em Java7 Interfaces Interfaces são (sintaticamente) semelhantes a classes abstratas Diferenças:
8 Interfaces em Java8 Interfaces Modificadores: public protected : interfaces internas apenas private : interfaces internas apenas abstract : redundante e obsoleto static : interfaces internas apenas strictfp : expressões envolvendo float e double são consideradas strictfp
9 Interfaces em Java9 Interfaces Membros: Campos: apenas constantes: public static final Importante: uma interface não pode conter variáveis. Métodos: public e abstract Importante : uma interface não pode ter métodos concretos
10 Interfaces em Java10 Interfaces Implementação: Semelhante à sintaxe usada em derivação, mas usa a palavra reservada implements Diferentemente do que ocorre com derivação, pode- se implementar mais de uma interface; neste caso, as interfaces são separadas por vírgulas Outra diferença: interfaces não crescem Classes herdam tudo de suas superclasses, inclusive as interfaces que elas implementam.
11 Interfaces em Java11 Interfaces Exemplo: class Carro implements Revenda { double ObtemPreço() {... }... }
12 Interfaces em Java12 Uma classe pode implementar várias interfaces ao mesmo tempo. Em contrapartida, só pode herdar de uma única classe. Uma classe pode estender uma classe e implementar várias interfaces ao mesmo tempo. Exemplo class Carro extends Veiculo implements Revenda { double ObtemPreço() {... }... } Interfaces
13 Interfaces em Java13 Interfaces podem ser usadas como tipos, como as classes. Métodos que aceitam parâmetros do tipo de uma interface: Não se preocupam com a implementação dos métodos da interface, mas exigem que estes sejam implementados. Não se preocupam com a classe efetiva do objeto. O problema é que só se pode usar o comportamento das interfaces, nunca o das classes. Interfaces
14 Interfaces em Java14 Exemplo: Interfaces class Carro implements Revenda { double ObtemPreço() {... } void Ligar(){...} } class Boneca implements Revenda { double ObtemPreço() {... } void Brincar() {...} } class X { double metodo1(Revenda Param1) {... }... }
15 Interfaces em Java15 Sejam: Boneca B1; Carro C1; X X1; Logo, podemos chamar: X1.metodo1(B1); X1.metodo1(C1); Interfaces Não podemos fazer referência a Brincar ou Ligar, mas sim a ObtemPreco
16 Interfaces em Java16 Assim como classes, as interfaces podem extender o comportamento de outras interfaces. Para tanto, basta usar extends, como nas classes Ao contrário das classes, elas podem extender múltiplas interfaces Para tanto, basta separar os nomes por vírgulas. Exemplo: public interface Component extends Locatable, Sizeable; Interfaces
17 Interfaces em Java17 Posso implementar duas interfaces que contêm um método se tiver o mesmo nome: Se tiver mesma assinatura e desejamos mesmo comportamento, só precisa implementar uma vez. Se tiver assinaturas diferentes, tenho que implementar duas vezes. Se tiver mesma assinatura e desejamos comportamentos distintos, temos que renomear um dos dois métodos. Interfaces
18 Interfaces em Java18 Interfaces úteis A interface Comparable pede a implementação do método abstrato de assinatura: public abstract int compareTo(Comparable b) Este método deve retornar: 1 se o objeto corrente for maior que b 0 se os objetos forem iguais -1 se o objeto corrente for menor que b Graça : usar o método sort da classe Arrays.
19 Interfaces em Java19 Interfaces úteis Exemplo : seja a classe XYZ que implementa a interface Comparable. Temos então: public class XYZTest { XYZ[] a=new XYZ[20]; : Arrays.sort(a); : }
20 Interfaces em Java20 Interfaces úteis Cloneable: pede a implementação do método abstrato de assinatura: public Object clone(); Dentro da classe Object (superclasse de todas as classes) já existe uma implementação de clone que copia o objeto corrente bit a bit. Só implementamos o clone se acharmos que esta cópia não é boa o suficiente.
21 Interfaces em Java21 Interfaces úteis Note que o método clone retorna um elemento do tipo Object. Para armazenar em um objeto da classe em questão preciso fazer um typecast explícito. Ex.: ClasseXYZ z=(ClasseXYZ) x.clone(); É da classe ClasseXYZ!