Назад к вопросам
Промсвязьбанк
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 — и по наследованию, и по пакету.