Junior — Middle
Explicați diferențele în utilizarea modificatorului de acces protected în limbajele Java și Kotlin.
sobes.tech AI
Răspuns de la AI
În Java, modificatorul de acces protected înseamnă că membrul clasei este accesibil:
- În cadrul clasei în sine
- În toate clasele moștenitoare (chiar dacă se află în alt pachet)
- În toate clasele din același pachet
Adică, protected în Java este o combinație de acces prin moștenire și prin pachet.
În Kotlin, însă, protected înseamnă acces doar în interiorul clasei și al subclasei sale, dar nu accesibil din alte clase ale aceluiași pachet. În Kotlin nu există conceptul de acces prin pachet, așa că protected este mai strict decât în Java.
Exemplu:
// 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; // Accesibil, deoarece în același pachet
}
}
package pkg2;
public class C extends A {
void test() {
int val = x; // Accesibil, deoarece subclasă
}
}
// Kotlin
open class A {
protected val x = 10
}
class B : A() {
fun test() {
println(x) // Accesibil, subclasă
}
}
class C {
fun test() {
val a = A()
// println(a.x) // Eroare: `protected` nu este accesibil în afara clasei și subclasei
}
}
Prin urmare, diferența principală este că în Kotlin protected nu permite accesul prin pachet, doar prin moștenire, în timp ce în Java permite ambele.