Sobes.tech
Middle

¿Cuáles son las diferencias entre las interfaces en Kotlin y Java?

sobes.tech AI

Respuesta de la IA

Diferencias principales:

  • Implementación de métodos por defecto: En Java 8 y versiones superiores, en las interfaces se pueden implementar métodos con cuerpo (métodos por defecto). En Kotlin, los métodos en interfaces tienen cuerpos por defecto. La palabra clave default no es necesaria.

  • Métodos abstractos y abiertos: En Java, todos los métodos de interfaz son implícitamente abstractos. Para hacer un método con cuerpo, se debe usar default. En Kotlin, los métodos en interfaces con cuerpo son implícitamente open y pueden ser sobrescritos en las clases que implementan la interfaz. Los métodos sin cuerpo son implícitamente abstract.

  • Estado (Propiedades): En Java, las interfaces no pueden contener campos, solo constantes (final static). En Kotlin, las interfaces pueden declarar propiedades abstractas, que deben ser implementadas en las clases, o propiedades con getters/setters por defecto (los campos de respaldo no almacenan datos).

  • Constructores: En Java, las interfaces no pueden contener constructores. En Kotlin, las interfaces tampoco pueden contener constructores.

  • Modificadores de visibilidad: En Java, los métodos de interfaz son implícitamente public. En Kotlin, los métodos de interfaz son implícitamente public open.

Característica Kotlin Java
Implementación de métodos Permitida (por defecto) Permitida (con default)
Abstractidad de métodos Sin cuerpo - abstract, con cuerpo - open Sin cuerpo - abstract, con cuerpo - default
Estado (Propiedades) Permitidas (abstractas o con accesores) No permitidas (solo constantes)
Constructores No permitidos No permitidos
Modificador de visibilidad public open por defecto public por defecto

Ejemplo en Kotlin:

interface MyInterface {
    val myProperty: String // Propiedad abstracta

    fun abstractMethod() // Método abstracto

    fun defaultMethod() {
        // Implementación por defecto
        println("Implementación por defecto en interfaz Kotlin")
    }
}

Ejemplo en Java:

interface MyInterfaceJava {
    // No hay propiedades, solo constantes permitidas
    // public static final String MY_CONSTANT = "valor";

    void abstractMethod(); // Método abstracto (implícitamente público y abstracto)

    default void defaultMethod() { // Método por defecto
        // Implementación por defecto
        System.out.println("Implementación por defecto en interfaz Java");
    }
}