Sobes.tech
Middle

Quais são as diferenças entre as interfaces em Kotlin e Java?

sobes.tech IA

Resposta da IA

Principais diferenças:

  • Implementação de métodos por defeito: No Java 8 e versões superiores, é possível implementar métodos com corpo (métodos por defeito) nas interfaces. No Kotlin, os métodos em interfaces têm corpos por defeito. A palavra-chave default não é necessária.

  • Métodos abstratos e abertos: No Java, todos os métodos de interface são implicitamente abstratos. Para fazer um método com corpo, deve-se usar default. No Kotlin, os métodos com corpo em interfaces são implicitamente open e podem ser sobrescritos nas classes que implementam a interface. Métodos sem corpo são implicitamente abstract.

  • Estado (Propriedades): No Java, as interfaces não podem conter campos, apenas constantes (final static). No Kotlin, as interfaces podem declarar propriedades abstratas, que devem ser implementadas nas classes, ou propriedades com getters/setters padrão (os campos de apoio não armazenam dados).

  • Construtores: No Java, as interfaces não podem conter construtores. No Kotlin, as interfaces também não podem conter construtores.

  • Modificadores de visibilidade: No Java, os métodos de interface são implicitamente public. No Kotlin, os métodos de interface são implicitamente public open.

Característica Kotlin Java
Implementação de métodos Permitida (por padrão) Permitida (com default)
Abstratibilidade de métodos Sem corpo - abstract, com corpo - open Sem corpo - abstract, com corpo - default
Estado (Propriedades) Permitidas (abstratas ou com acessores) Não permitidas (apenas constantes)
Construtores Não permitidos Não permitidos
Modificador de visibilidade public open por padrão public por padrão

Exemplo em Kotlin:

interface MyInterface {
    val myProperty: String // Propriedade abstrata

    fun abstractMethod() // Método abstrato

    fun defaultMethod() {
        // Implementação padrão
        println("Implementação padrão na interface Kotlin")
    }
}

Exemplo em Java:

interface MyInterfaceJava {
    // Sem propriedades, apenas constantes permitidas
    // public static final String MY_CONSTANT = "valor";

    void abstractMethod(); // Método abstrato (implicitamente público e abstrato)

    default void defaultMethod() { // Método padrão
        // Implementação padrão
        System.out.println("Implementação padrão na interface Java");
    }
}