Uma interface na linguagem Java é apenas um contrato que a c...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: A - as variáveis são implicitamente public static final.
A alternativa A está correta porque, em Java, quando definimos uma interface, todos os campos (ou variáveis) declarados nela são automaticamente public, static e final. Isso significa que são acessíveis a todos (public), pertencem à própria interface e não a uma instância dela (static), e uma vez atribuídos, seus valores não podem ser alterados (final). Este é um comportamento padrão da linguagem para garantir que as constantes definidas em interfaces sejam realmente constantes e acessíveis de forma uniforme pelas classes que implementam a interface.
Por exemplo, se temos a seguinte interface:
interface ExemploInterface { int EXEMPLO_CONSTANTE = 10; // Implicitamente public static final }
A função dessa sintaxe é permitir que qualquer classe que implemente ExemploInterface
possa acessar EXEMPLO_CONSTANTE
sem a necessidade de instanciar um objeto, e a garantia de que o valor é uma constante, ou seja, não pode ser alterado em nenhum ponto do programa.
As outras alternativas são incorretas por motivos específicos:
- B - Interfaces não são parte da herança no mesmo sentido que as classes são. Elas são usadas para definir um contrato que as classes podem implementar, mas não há uma hierarquia de herança entre interfaces e classes.
- C - Uma interface não pode implementar uma classe. Em Java, uma classe é que pode implementar uma ou mais interfaces, mas o inverso não é verdadeiro.
- D - Em uma interface, todos os métodos são implicitamente public e abstract, e as variáveis são public static final, não podendo ter outros modificadores de acesso.
O entendimento correto sobre o funcionamento de interfaces é crucial para o uso adequado desse recurso na programação em Java, especialmente em um contexto de desenvolvimento orientado a objetos onde a definição clara de contratos é uma prática importante.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
A) Correto... Só não posso chamar de "variável" algo com o modificador "final". O correto é: todos os campos são 'public static final' e todos os métodos são 'public abstract'. Caso algum desses modificadores não seja adicionado, ele ficará implícito.
B) Se interface fosse considerada herança, poderíamos dizer que Java possui herança múltipla. Mas não é o caso.
C) Uma classe pode implementar uma interface. Uma interface pode estender outra interface.
D) Campos e métodos de interface são sempre public. Para a interface em si, funciona a mesma regra das classes: pode ter identificadores de acesso public ou vazio (default).
Um pequeno adendo ao comentário do colega Leandro:
Não há necessidade, em provas e concursos, mencionar que não podemos chamar variável de algo com modificador final. Embora o termo 'campo' estar presente na documentação Java não é recomendado usar pois você irá se confundir com atributo( da UML), atributo ( da linguagem Java)... ai está feita a merd#$#@!#
Para provas/concurso basta saber:
Variável é aquele lugarzinho na memória onde ficam os dados durante execução de um programa. simples assim!
Mas Max e o 'final'? Pense nele como o Durepoxi, em atributos, você vai usar e ponto final, ou seja, não pode ser modificado depois de usá-lo
Resposta correta: As variáveis são implicitamente public static final.
Fala, @Max
"Campo" é um termo genérico que abrange tudo: atributo, variável estática, constante estática. Por isso que usei.
Sobre a "variável" existir em uma interface, olha só o que é dito na documentação oficial:
- An interface is a reference type, similar to a class, that can contain only constants, method signatures, default methods, static methods, and nested types
https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
a-
Every field declaration in the body of an interface is implicitly public, static, and final. It is permitted to redundantly specify any or all of these modifiers for such fields.
https://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.3
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo