Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

dúvida

Qual a diferença de um metodo default pra um static em um interface?

3 respostas

Olá, Luccas! Tudo bem?

Ótima pergunta! Vamos lá:

  1. Método default em uma interface:

    • Introduzido no Java 8.
    • Permite que uma interface tenha métodos com implementação padrão.
    • As classes que implementam a interface podem optar por sobrescrever esses métodos ou usar a implementação padrão fornecida.
    • Útil para adicionar novos métodos a interfaces existentes sem quebrar o código das classes que já implementam a interface.

    Exemplo:

    public interface MyInterface {
        default void sayHello() {
            System.out.println("Hello from default method!");
        }
    }
    
    public class MyClass implements MyInterface {
        // Pode usar a implementação padrão ou sobrescrever o método
    }
    
  2. Método static em uma interface:

    • Também introduzido no Java 8.
    • Permite que uma interface tenha métodos estáticos.
    • Esses métodos não podem ser sobrescritos pelas classes que implementam a interface.
    • Útil para fornecer métodos utilitários relacionados à interface.

    Exemplo:

    public interface MyInterface {
        static void sayHello() {
            System.out.println("Hello from static method!");
        }
    }
    
    public class MyClass implements MyInterface {
        // Não pode sobrescrever o método estático
    }
    
    // Para chamar o método estático
    MyInterface.sayHello();
    

Resumindo, a principal diferença é que métodos default podem ser sobrescritos pelas classes que implementam a interface, enquanto métodos static não podem ser sobrescritos e são chamados diretamente na interface.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Entao metodo static, eu nao poderia chamar MyClass.sayHello();?

solução!

Opa Lucas!

Exatamente! Quando um método static é definido em uma interface, ele pertence à própria interface, não à classe que implementa a interface. Portanto, não é possível chamar o método estático diretamente através da classe que implementa a interface. Você deve chamá-lo diretamente pela interface.

Então, ao tentar chamar MyClass.sayHello();, isso resultaria em um erro de compilação, pois sayHello() é um método estático da interface MyInterface, e não da classe MyClass.

Se precisar de mais alguma coisa, é só me avisar.