Sobes.tech
Junior — Middle

Објасните разлике у коришћењу модификатора приступа protected у језицима Java и Kotlin.

sobes.tech АИ

Одговор од АИ

U Javi, modifikator pristupa protected znači da je član klase dostupan:

  • Unutar same klase
  • U svim naslednim klasama (čak i ako se nalaze u drugom paketu)
  • U svim klasama unutar istog paketa

To znači da je protected u Javi kombinacija pristupa putem nasledjivanja i putem paketa.

U Kotlin-u, međutim, protected znači pristup samo unutar same klase i njenih podklasa, ali nije dostupan iz drugih klasa istog paketa. U Kotlin-u ne postoji koncept pristupa putem paketa, pa je protected strožiji nego u Javi.

Primer:

// 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; // Dostupno, jer je u istom paketu
    }
}

package pkg2;
public class C extends A {
    void test() {
        int val = x; // Dostupno, jer je podklasa
    }
}
// Kotlin
open class A {
    protected val x = 10
}

class B : A() {
    fun test() {
        println(x) // Dostupno, jer je podklasa
    }
}

class C {
    fun test() {
        val a = A()
        // println(a.x) // Greška: `protected` nije dostupno izvan klase i njenih podklasa
    }
}

Dakle, glavna razlika je što u Kotlin-u protected ne dozvoljava pristup putem paketa, samo putem nasledjivanja, dok u Javi — i jedno i drugo.