Sobes.tech
Junior — Middle

Magyarázza el a protected hozzáférés módosító használatának különbségeit Java és Kotlin nyelveken.

sobes.tech MI

Válasz az MI-től

Java-ban a protected hozzáférés módosító azt jelenti, hogy a osztály tagja:

  • A saját osztályán belül
  • Minden öröklődő osztályban (még akkor is, ha más csomagban vannak)
  • Minden osztályban ugyanabban a csomagban

Tehát, a Java-ban a protected egy kombinációja az öröklődésen alapuló és a csomagon belüli hozzáférésnek.

Kotlinban viszont a protected csak az osztályon belül és annak leszármazottain belül teszi lehetővé a hozzáférést, de nem elérhető más osztályokból ugyanabban a csomagban. Kotlinban nincs csomag alapú hozzáférés fogalma, ezért a protected szigorúbb, mint Java-ban.

Példa:

// 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; // Elérhető, mert ugyanabban a csomagban
    }
}

package pkg2;
public class C extends A {
    void test() {
        int val = x; // Elérhető, mert leszármazott
    }
}
// Kotlin
open class A {
    protected val x = 10
}

class B : A() {
    fun test() {
        println(x) // Elérhető, leszármazott
    }
}

class C {
    fun test() {
        val a = A()
        // println(a.x) // Hiba: `protected` nem elérhető osztályon kívül és leszármazottain kívül
    }
}

Ezért a fő különbség az, hogy Kotlinban a protected nem engedélyezi a csomagon belüli hozzáférést, csak öröklődésen keresztül, míg Java-ban mindkettő lehetséges.