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 — и чрез наследяване, и чрез пакета.