Julgue o item a seguir, relacionados a desenvolvimento web e...
Julgue o item a seguir, relacionados a desenvolvimento web em Java.
A partir do Java 8 é possível ter métodos concretos em
interfaces, o que permite evoluir uma interface sem que haja
comprometimento à compatibilidade.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: C - certo
A questão aborda um conceito introduzido no Java 8, que é a capacidade de interfaces incluírem métodos concretos, conhecidos como métodos default. Este recurso permite que os desenvolvedores evoluam interfaces adicionando novos métodos sem quebrar a compatibilidade com as classes que já as implementam.
Antes do Java 8, todas as interfaces só podiam conter métodos abstratos, ou seja, métodos sem corpo, que precisavam ser implementados obrigatoriamente pelas classes que assinavam essas interfaces. Com a introdução dos métodos default, é possível agora incluir implementações reais que não precisam ser sobrescritas nas classes que implementam a interface, facilitando a evolução de APIs sem que haja a necessidade de modificar todas as classes que usam a interface.
Por exemplo, se tivermos uma interface chamada MeuInterface
, poderíamos adicionar um novo método default da seguinte forma:
public interface MeuInterface {
void metodoAntigo();
default void novoMetodo() {
// implementação que será herdada por padrão
}
}
Com essa adição, as classes que implementam MeuInterface
não são obrigadas a implementar novoMetodo()
(a menos que queiram mudar o comportamento padrão), o que mantém o código dessas classes funcional após a adição do novo método na interface.
Esta característica é particularmente útil quando se deseja adicionar novas funcionalidades a bibliotecas ou frameworks sem forçar todos os usuários existentes a atualizar suas implementações.
É por isso que a afirmativa é correta, pois reflete com precisão uma das melhorias trazidas pelo Java 8 para o desenvolvimento de interfaces e a manutenção de código em Java.
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
Podemos ter métodos concretos em interfaces a partir do Java 8! Basta utilizar o modificador default . Eles serão 'herdados' por todos que implementarem essa interface. Esse recurso, chamado default method, permite evoluir uma interface sem quebrar compatibilidade.
Fonte:https://www.alura.com.br/artigos/o-minimo-que-voce-deve-saber-de-java-8#:~:text=Podemos%20ter%20m%C3%A9todos%20concretos%20em,uma%20interface%20sem%20quebrar%20compatibilidade.
Antes do Java 8, todas os métodos em uma interface eram considerados abstratos, o que significa que apenas as declarações de método eram permitidas, mas não a implementação. Isso exigia que as classes que implementavam as interfaces fornecessem uma implementação para todos os métodos declarados na interface.
No entanto, com a introdução das "interfaces funcionais" no Java 8, uma nova funcionalidade chamada "métodos padrão" (default methods) foi adicionada às interfaces. Um método padrão é um método com uma implementação padrão definida diretamente na interface. Isso permitiu que as interfaces fossem estendidas ou modificadas sem quebrar a compatibilidade com implementações anteriores.
By Chatgpt
O item está correto. A partir do Java 8, foi introduzida uma nova funcionalidade chamada "default methods" (métodos padrão) em interfaces. Isso permite que você defina métodos concretos em interfaces, em vez de apenas declarar métodos abstratos. Esses métodos concretos têm uma implementação padrão e podem ser herdados pelas classes que implementam a interface.
Essa funcionalidade foi introduzida para permitir a evolução de interfaces sem quebrar a compatibilidade com as classes existentes que implementam essas interfaces. Ou seja, se você precisar adicionar um novo método a uma interface, você pode fornecer uma implementação padrão para esse método. As classes que já implementam a interface não precisarão necessariamente implementar o novo método, pois ele já possui uma implementação padrão na interface.
Isso é particularmente útil quando se trata de bibliotecas e APIs, pois evita a necessidade de alterar todas as classes que implementam uma interface sempre que a interface é estendida. Dessa forma, o Java 8 introduziu uma maneira mais flexível de adicionar funcionalidades às interfaces sem quebrar a compatibilidade.
interface MinhaInterface {
default void metodoPadrao() {
System.out.println("Método default na interface");
}
}
class MinhaClasse implements MinhaInterface {
// Pode usar o método padrão sem necessidade de implementação
}
public class Main {
public static void main(String[] args) {
MinhaClasse obj = new MinhaClasse();
obj.metodoPadrao(); // Saída: Método default na interface
}
}
Antes do Java 8, todos os métodos em uma interface eram considerados abstratos por padrão. Ou seja, eles não tinham implementação e deveriam ser implementados pelas classes que usassem essa interface.
A assinatura de um método em uma interface era algo como:
interface MinhaInterface {
void meuMetodo(); // método abstrato, sem implementação
}
A única maneira de uma classe que implementasse essa interface funcionar seria fornecer uma implementação para todos os métodos da interface.
O que mudou no Java 8?
Com o Java 8, introduziu-se o conceito de métodos default e métodos estáticos em interfaces. Agora, uma interface pode ter métodos com implementação, o que permite fornecer uma implementação padrão para métodos, sem a necessidade de que as classes que implementam a interface forneçam uma implementação própria (a menos que elas queiram sobrescrevê-la).
Exemplo de um método default:
interface MinhaInterface {
// Método default com implementação
default void meuMetodo() {
System.out.println("Implementação padrão");
}
}
Além disso, também é possível ter métodos estáticos nas interfaces, que são métodos que pertencem à própria interface e podem ser chamados de forma estática:
interface MinhaInterface {
static void metodoEstatico() {
System.out.println("Método estático na interface");
}
}
Essas mudanças tornaram as interfaces mais poderosas, permitindo que os desenvolvedores definam comportamentos padrão em interfaces, mas mantendo a possibilidade de sobrescrever esses comportamentos quando necessário nas classes implementadoras.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo