Sobes.tech
Junior — Middle

Обяснете разликите в използването на модификатора за достъп protected в езиците Java и Kotlin.

sobes.tech AI

Отговор от AI

В Java, модификаторът за достъп protected означава, че членът на класа е достъпен:

  • В самия клас
  • Във всички наследяващи класове (дори ако са в различен пакет)
  • Във всички класове в същия пакет

Това означава, че protected в Java е комбинация от достъп чрез наследяване и чрез пакет.

В Kotlin обаче, protected означава достъп само вътре в самия клас и неговите подкласове, но не е достъпен от други класове в същия пакет. В Kotlin няма концепция за достъп чрез пакет, затова protected е по-строг отколкото в Java.

Пример:

// 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; // Достъпно, защото е в същия пакет
    }
}

package pkg2;
public class C extends A {
    void test() {
        int val = x; // Достъпно, защото е наследник
    }
}
// Kotlin
open class A {
    protected val x = 10
}

class B : A() {
    fun test() {
        println(x) // Достъпно, наследник
    }
}

class C {
    fun test() {
        val a = A()
        // println(a.x) // Грешка: `protected` не е достъпен извън класа и наследниците му
    }
}

Следователно, основната разлика е, че в Kotlin protected не дава достъп чрез пакета, само чрез наследяване, а в Java — и чрез наследяване, и чрез пакета.