Junior — Middle
Објасните разлике у коришћењу модификатора приступа protected у језицима Java и Kotlin.
sobes.tech АИ
Одговор од АИ
U Javi, modifikator pristupa protected znači da je član klase dostupan:
- Unutar same klase
- U svim naslednim klasama (čak i ako se nalaze u drugom paketu)
- U svim klasama unutar istog paketa
To znači da je protected u Javi kombinacija pristupa putem nasledjivanja i putem paketa.
U Kotlin-u, međutim, protected znači pristup samo unutar same klase i njenih podklasa, ali nije dostupan iz drugih klasa istog paketa. U Kotlin-u ne postoji koncept pristupa putem paketa, pa je protected strožiji nego u Javi.
Primer:
// 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; // Dostupno, jer je u istom paketu
}
}
package pkg2;
public class C extends A {
void test() {
int val = x; // Dostupno, jer je podklasa
}
}
// Kotlin
open class A {
protected val x = 10
}
class B : A() {
fun test() {
println(x) // Dostupno, jer je podklasa
}
}
class C {
fun test() {
val a = A()
// println(a.x) // Greška: `protected` nije dostupno izvan klase i njenih podklasa
}
}
Dakle, glavna razlika je što u Kotlin-u protected ne dozvoljava pristup putem paketa, samo putem nasledjivanja, dok u Javi — i jedno i drugo.