Sobes.tech
Junior — Middle

Wyjaśnij różnice w użyciu modyfikatora dostępu protected w językach Java i Kotlin.

sobes.tech AI

Odpowiedź od AI

W Javie modyfikator dostępu protected oznacza, że członek klasy jest dostępny:

  • W samej klasie
  • We wszystkich klasach dziedziczących (nawet jeśli znajdują się w innym pakiecie)
  • We wszystkich klasach w tym samym pakiecie

Oznacza to, że protected w Javie jest połączeniem dostępu przez dziedziczenie i przez pakiet.

W Kotlinie protected oznacza dostęp tylko w obrębie samej klasy i jej podklas, ale nie jest dostępny z innych klas tego samego pakietu. W Kotlinie nie ma koncepcji dostępu przez pakiet, więc protected jest bardziej restrykcyjny niż w Javie.

Przykład:

// 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; // Dostępne, ponieważ w tym samym pakiecie
    }
}

package pkg2;
public class C extends A {
    void test() {
        int val = x; // Dostępne, ponieważ podklasa
    }
}
// Kotlin
open class A {
    protected val x = 10
}

class B : A() {
    fun test() {
        println(x) // Dostępne, podklasa
    }
}

class C {
    fun test() {
        val a = A()
        // println(a.x) // Błąd: `protected` niedostępny spoza klasy i jej podklas
    }
}

W związku z tym główna różnica polega na tym, że w Kotlinie protected nie pozwala na dostęp przez pakiet, tylko przez dziedziczenie, podczas gdy w Javie oba są możliwe.