Junior — Middle
Wyjaśnij różnice w użyciu modyfikatora dostępu protected w językach Java i Kotlin.
sobes.tech AI
Odpowiedź od AI
W Javie modyfikator dostępu protected oznacza, że członek klasy jest dostępny:
- W samej klasie
- We wszystkich klasach dziedziczących (nawet jeśli znajdują się w innym pakiecie)
- We wszystkich klasach w tym samym pakiecie
Oznacza to, że protected w Javie jest połączeniem dostępu przez dziedziczenie i przez pakiet.
W Kotlinie protected oznacza dostęp tylko w obrębie samej klasy i jej podklas, ale nie jest dostępny z innych klas tego samego pakietu. W Kotlinie nie ma koncepcji dostępu przez pakiet, więc protected jest bardziej restrykcyjny niż w Javie.
Przykład:
// 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; // Dostępne, ponieważ w tym samym pakiecie
}
}
package pkg2;
public class C extends A {
void test() {
int val = x; // Dostępne, ponieważ podklasa
}
}
// Kotlin
open class A {
protected val x = 10
}
class B : A() {
fun test() {
println(x) // Dostępne, podklasa
}
}
class C {
fun test() {
val a = A()
// println(a.x) // Błąd: `protected` niedostępny spoza klasy i jej podklas
}
}
W związku z tym główna różnica polega na tym, że w Kotlinie protected nie pozwala na dostęp przez pakiet, tylko przez dziedziczenie, podczas gdy w Javie oba są możliwe.