Sobes.tech
Назад к вопросам
Junior — Middle
81

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

Компании, где спрашивали
ПромсвязьбанкПромсвязьбанк
ПСБ

Ответ от нейросети

sobes.tech 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 — и по наследованию, и по пакету.