Sobes.tech
Middle

Care sunt diferențele dintre interfețe în Kotlin și Java?

sobes.tech AI

Răspuns de la AI

Principalele diferențe:

  • Implementarea metodelor implicite: În Java 8 și versiunile ulterioare, se pot implementa metode cu corp (metode implicite) în interfețe. În Kotlin, metodele din interfețe au corpuri implicite. Cuvântul cheie default nu este necesar.

  • Metode abstracte și deschise: În Java, toate metodele din interfețe sunt implicit abstracte. Pentru a avea o metodă cu corp, se folosește default. În Kotlin, metodele cu corp în interfețe sunt implicit open și pot fi suprascrise în clasele care implementează interfața. Metodele fără corp sunt implicit abstract.

  • Stare (Proprietăți): În Java, interfețele nu pot conține câmpuri, doar constante (final static). În Kotlin, interfețele pot declara proprietăți abstracte, care trebuie implementate în clase, sau proprietăți cu getters/setters implicite (câmpurile de suport nu stochează date).

  • Constructori: În Java, interfețele nu pot conține constructori. În Kotlin, interfețele nu pot conține constructori.

  • Modificatori de vizibilitate: În Java, metodele din interfețe sunt implicit public. În Kotlin, metodele din interfețe sunt implicit public open.

Caracteristică Kotlin Java
Implementarea metodelor Permis (implicit) Permis (cu default)
Abstracția metodelor Fără corp - abstract, cu corp - open Fără corp - abstract, cu corp - default
Proprietăți (Properties) Permise (abstracte sau cu accesori) Nu permise (doar constante)
Constructori Nu permise Nu permise
Modificator de vizibilitate public open implicit public implicit

Exemplu în Kotlin:

interface MyInterface {
    val myProperty: String // Proprietate abstractă

    fun abstractMethod() // Metodă abstractă

    fun defaultMethod() {
        // Implementare implicită
        println("Implementare implicită în interfața Kotlin")
    }
}

Exemplu în Java:

interface MyInterfaceJava {
    // Fără proprietăți, doar constante permise
    // public static final String MY_CONSTANT = "valoare";

    void abstractMethod(); // Metodă abstractă (implicit public și abstract)

    default void defaultMethod() { // Metodă implicită
        // Implementare implicită
        System.out.println("Implementare implicită în interfața Java");
    }
}