Programação Orientada a Objetos: Uma Abordagem com Java/Princípios da programação na linguagem Java/Classes Java/Interfaces

Origem: Wikilivros, livros abertos por um mundo aberto.

Interfaces[editar | editar código-fonte]

Java também oferece uma estrutura, denominada interface, com sintaxe similar àquela de classes. No entanto, interfaces contêm apenas a especificação da funcionalidade (o conjunto de operações) que um objeto deve poder executar, sem determinar como essa funcionalidade deve ser implementada. Diz-se que a classe desse objeto implementa a interface.

Uma interface Java é equivalente a uma classe abstrata para a qual todos os métodos são implicitamente abstract e public, e todos os atributos são implicitamente static e final. Para quem conhece C++, uma interface Java equivale a uma “classe abstrata pura”.

A sintaxe para a declaração de uma interface é similar àquela para a definição de classes, porém seu corpo define apenas assinaturas de métodos e constantes. Por exemplo, para definir uma interface Interface1 que declara um método met1 sem argumentos e sem valor de retorno, a sintaxe é:

interface Interface1 { 
    void met1(); 
}

A diferença entre uma classe abstrata e uma interface Java é que a interface obrigatoriamente não tem um “corpo” associado para nenhuma de suas operações. Para que uma classe seja abstrata basta que ela seja assim declarada, mas a classe pode incluir atributos de objetos e definição de métodos concretos, públicos ou não. Na interface, apenas métodos públicos podem ser declarados — mas não definidos. Da mesma forma, não é possível definir atributos — apenas constantes públicas.

Enquanto uma classe abstrata é “estendida” (palavra chave extends) por classes derivadas, uma interface Java é “implementada” (palavra chave implements) por outras classes. Uma interface estabelece um contrato que deve ser obedecido pelas classes que implementam a interface. Em outras palavras, quando uma classe implementa uma interface, garante-se que todas as funcionalidades especificadas pela interface serão oferecidas pela classe.

Outro uso de interfaces Java é para a definição de constantes que podem ser compartilhadas por diversas classes. Neste caso, a recomendação é implementar interfaces sem métodos, pois as classes que implementarem tais interfaces não precisam tipicamente redefinir nenhum método. Por exemplo, para definir um conjunto de constantes com valores de moedas:

interface Coins { 
    int PENNY = 1;
    int NICKEL = 5;
    int DIME = 10;
    int QUARTER = 25;
    int DOLAR = 100; 
}

Já uma classe que usa esses valores:

class SodaMachine implements Coins { 
    int canPrice = 3*QUARTER; 
    // ... 
}