JavaRush /Blogue Java /Random-PT /O que são interfaces
fog
Nível 18

O que são interfaces

Publicado no grupo Random-PT
Uma interface é um contrato (acordo) público e geralmente aceito que descreve algum comportamento. Para que eles são necessários? Por exemplo, digamos que temos um link apontando para uma lista de strings. Digamos que muitos elementos sejam adicionados a esta lista no início e, em seguida, toda a lista seja processada uma vez. Digamos que decidimos seguir a recomendação bem conhecida e usar a classeArrayList:
ArrayList<String> list = new ArrayList<>();
Escrevemos um comportamento de programa em 100.500 linhas de código que usava essa lista de strings e métodos específicos de classe para otimizar o desempenho ArrayList. Por exemplo, garantirCapacity() . Desde que as linhas sejam adicionadas ao final da lista, tudo funciona bem e rapidamente. Mas agora temos a necessidade de reorientar o nosso programa para um tipo de trabalho ligeiramente diferente, onde as linhas são adicionadas principalmente no início da lista. Para este tipo de carga é muito mais adequado LinkedList. Mas se quisermos traduzir nosso programa de 100.500 linhas de código para rails LinkedList, precisaremos encontrar e remover o uso de ArrayListmétodos específicos, talvez em alguns lugares alterando bastante a lógica de seções individuais do programa. Se usássemos apenas os métodos que estão disponíveis em ArrayListe em LinkedList, não precisaríamos fazer isso. Poderíamos apenas alterar uma linha de código – a declaração da lista:
LinkedList<String> list = new LinkedList<>();
Podemos notar que seria mais conveniente colocar a declaração dos métodos comuns para estas classes em uma classe ancestral, possivelmente abstrata, por exemplo AbstractList. Nesse caso, poderíamos declarar nossa lista assim:
AbstractList<String> list = new ArrayList<>();
E poderíamos mudar rapidamente a implementação assim:
AbstractList<String> list = new LinkedList<>();
Mas neste caso, as classes que podemos usar em nosso programa são limitadas apenas aos descendentes da classe AbstractList, mesmo que existam classes mais adequadas que não sejam descendentes da classe AbstractList, mas tenham os mesmos métodos com o mesmo comportamento. O que devo fazer? É por isso que as interfaces foram inventadas . Uma interface é uma convenção sobre um conjunto de métodos e seu comportamento com a qual classes completamente não relacionadas podem se comprometer, permitindo que qualquer um deles seja referenciado por uma única referência. Por exemplo assim:
List<String> list;
list = new ArrayList<>();
list = new LinkedList<>();
list = new AnotherListClass<>();
Mesmo que AnotherListClassas classes não tenham classes ancestrais comuns, ArrayListexceto . Um bom exemplo de interface é a direção de um carro - um carro tem volante, pedais e caixa de câmbio. Na grande maioria dos carros, estes elementos seguem a mesma convenção de comportamento. Por exemplo, se você girar o volante no sentido anti-horário, o carro virará à esquerda em vez de acelerar, independentemente da marca. Se você souber usar esses controles, poderá manusear facilmente qualquer carro, independentemente do modelo, ano, marca ou tipo de motor. Além disso, pode-se imaginar uma situação em que um tipo de transporte completamente diferente (por exemplo, uma nave espacial) tenha a mesma interface de controle que os carros. Se você, sabendo dirigir um carro, se encontrar no lugar do piloto de tal navio, poderá evitar se perder nesta situação. Vamos repetir mais uma vez:LinkedListObject
  • Uma interface é um contrato (acordo) sobre comportamento.
  • Muitas classes, mesmo aquelas não relacionadas por herança, podem declarar que concordam em cumprir este contrato (implementação da interface).
  • Colocar a descrição do comportamento em uma interface separada é muito conveniente, pois aumenta a flexibilidade do código, permitindo alternar a implementação (classe que implementa a interface) da interface para classes não relacionadas por herança.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION