Junior — Middle
Vysvětlete rozdíly v používání modifikátoru přístupu protected v jazycích Java a Kotlin.
sobes.tech AI
Odpověď od AI
V Javě znamená modifikátor přístupu protected, že člen třídy je přístupný:
- V rámci samotné třídy
- Ve všech dědících třídách (i když jsou v jiném balíčku)
- Ve všech třídách ve stejném balíčku
To znamená, že protected v Javě je kombinací přístupu přes dědičnost a přes balíček.
V Kotlinu však protected znamená přístup pouze uvnitř samotné třídy a jejích podtříd, ale není přístupný z jiných tříd ve stejném balíčku. V Kotlinu neexistuje koncept přístupu přes balíček, proto je protected přísnější než v Javě.
Příklad:
// 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; // Přístupné, protože ve stejném balíčku
}
}
package pkg2;
public class C extends A {
void test() {
int val = x; // Přístupné, protože podtřída
}
}
// Kotlin
open class A {
protected val x = 10
}
class B : A() {
fun test() {
println(x) // Přístupné, podtřída
}
}
class C {
fun test() {
val a = A()
// println(a.x) // Chyba: `protected` není přístupný mimo třídu a její podtřídy
}
}
Proto hlavní rozdíl je, že v Kotlinu protected neumožňuje přístup přes balíček, pouze přes dědičnost, zatímco v Javě je to možné obojí.