Interfaces

Aula
Estado
  • Definem um conjunto de funcionalidades que podem ser aplicadas a diversas classes
  • Existem para solucionar o problema de herança múltipla
  • Por padrão seus métodos são public e abstract
  • Só possuem métodos concretos se forem default, ou private, ou static. Isso se deve ao fato de esses métodos não causarem o conflito de herança múltipla (com exceção do default, que possuí outra solução)
    • Se uma classe implementar múltiplas interfaces e houver uma duplicação de métodos default com a mesma assinatura, o compilador irá tratar o método como abstract e exigirá uma implementação
    • A palavra reservada default não é um modificador de acesso; ela apenas diz que o método da interface possuí corpo
  • Podem conter constantes, mas não variáveis
  • Se uma classe X implementa a interface Y
    • Uma referência de X pode sofrer um cast para Y
    • Uma referência de Y pode sofrer um cast para X
  • Utilizadas no Composition Pattern
  • Uma interface que implementa apenas uma operação abstrata é chamada functional interface
  • Podem ser utilizadas como um tipo de variável, mas não ser instanciar; similar a uma classe abstract
notion image
  • Interfaces vazias podem ser utilizadas como type-marker ou tag-interface. Como interfaces são tipos, essas são utilizadas para permitir uma classe de ser usada em algo (em uma comparação instanceof)
notion image