Se minha classe é implements
uma interface, posso dizer que estou seguindo a herança? Eu sei que quando uma classe é extends
outra, então é herança.
Se minha classe é implements
uma interface, posso dizer que estou seguindo a herança? Eu sei que quando uma classe é extends
outra, então é herança.
Respostas:
ATUALIZAÇÃO: Revisei esta resposta. Vários pontos positivos foram levantados nos comentários que mereciam ser destacados.
Se minha classe implementa uma interface, posso dizer que estou seguindo a herança?
Não está totalmente claro o que você quer dizer com "seguindo herança". Vamos fazer uma pergunta um pouco diferente?
O que é herança?
Estes são sutilmente diferentes. Isso é lamentável, porque é confuso.
Que confusões normalmente surgem dessa distinção sutil?
A confusão pode surgir porque as pessoas pensam na herança como um mecanismo para compartilhar detalhes de implementação. Embora seja esse mecanismo, esse mecanismo funciona compartilhando membros . Esses membros não precisam ter implementações! Como veremos, eles podem ser abstratos.
Pessoalmente, ficaria mais feliz se as especificações Java e C # usassem uma palavra diferente de "herda" para descrever o relacionamento entre métodos e classes de interface, para evitar essa confusão. Mas eles não o fazem, e temos que argumentar com base nas especificações, não contra elas.
Em Java, os membros da interface são herdados pelas classes que os implementam?
Sim, alguns são. Veja a seção 8.4.8 da especificação Java, que cito aqui para sua conveniência.
Uma classe C herda de sua superclasse direta e superinterfaces diretas todos os métodos abstratos e padrão m para os quais todos os seguintes são verdadeiros: [...]
Se você diz que uma classe implementa uma interface, a classe herda os métodos abstrato e padrão dessa interface . (É claro que omiti as condições a seguir; consulte a especificação para obter detalhes. Em particular, uma classe que implementa um membro de uma interface não é considerada como tendo herdado esse membro. Novamente, isso é confuso? Sim.)
Normalmente dizemos em Java que uma classe herda de uma interface?
Normalmente, diríamos que uma classe implementa uma interface. Como observado acima, uma classe pode herdar membros de uma interface e ainda assim não é dito que ela herdou da interface. O que é confuso, sim.
Essa distinção sutil importa no trabalho do dia a dia?
Normalmente não. Esse tipo de análise restrita da especificação é mais útil para escritores de compiladores do que para desenvolvedores de linha de negócios. É mais importante entender quando usar uma interface do que obter uma definição precisa de "herda de".
java
isso esta é a resposta certa, a menos que o OP significava alguma outra java
:-)
Herança significa escrever uma nova subclasse para uma superclasse. Escrever uma nova classe em uma interface está implementando essa interface. (E escrever uma nova interface com base em uma antiga está estendendo essa interface.)
O único termo correto que se aplica a todas as três possibilidades é subtipagem . Nem todo subtipo é uma subclasse.
Com subclasses , você
Com interfaces , você preenche um contrato implementando os métodos declarados.
Essa é a maneira clássica de ver isso. Agora, com o Java 8, as interfaces se tornam uma mistura:
A implementação de uma interface cujos métodos todos têm implementações padrão ainda conta como 'implementar', ou melhor, como extensão? Eu não sabia dizer. Como esse caso é exagerado (isso realmente habilitou a herança múltipla sem estado), eu ainda usaria 'herança' apenas nas subclasses.