Sobes.tech
Junior — Middle

Spiega le differenze nell'uso del modificatore di accesso protected nei linguaggi Java e Kotlin.

sobes.tech AI

Risposta dell'AI

In Java, il modificatore di accesso protected significa che il membro della classe è accessibile:

  • All’interno della stessa classe
  • In tutte le classi ereditarie (anche se si trovano in pacchetti diversi)
  • In tutte le classi all’interno dello stesso pacchetto

Quindi, protected in Java è una combinazione di accesso tramite ereditarietà e tramite pacchetto.

In Kotlin, invece, protected significa accesso solo all’interno della stessa classe e delle sue sottoclassi, ma non accessibile da altre classi dello stesso pacchetto. In Kotlin non esiste il concetto di accesso tramite pacchetto, quindi protected è più restrittivo rispetto a Java.

Esempio:

// Java
package pkg1;
public class A {
    protected int x = 10;
}

package pkg1;
public class B {
    void test() {
        A a = new A();
        int val = a.x; // Accessibile, perché nello stesso pacchetto
    }
}

package pkg2;
public class C extends A {
    void test() {
        int val = x; // Accessibile, perché sottoclasse
    }
}
// Kotlin
open class A {
    protected val x = 10
}

class B : A() {
    fun test() {
        println(x) // Accessibile, sottoclasse
    }
}

class C {
    fun test() {
        val a = A()
        // println(a.x) // Errore: `protected` non accessibile fuori dalla classe e dalle sue sottoclassi
    }
}

Pertanto, la principale differenza è che in Kotlin protected non consente l’accesso tramite pacchetto, solo tramite ereditarietà, mentre in Java permette entrambi.