Junior — Middle
Vysvetlite rozdiely v používaní modifikátora prístupu protected v jazykoch Java a Kotlin.
sobes.tech AI
Odpoveď od AI
V Jave, modifikátor prístupu protected znamená, že člen triedy je dostupný:
- Vo vnútri samotnej triedy
- Vo všetkých dediace triedach (aj keď sú v inom balíku)
- Vo všetkých triedach v tom istom balíku
To znamená, že protected v Jave je kombinácia prístupu cez dedičstvo a cez balík.
V Kotlin-e však protected znamená prístup iba v rámci samotnej triedy a jej podtried, ale nie je dostupný z iných tried toho istého balíka. V Kotlin-e neexistuje koncept prístupu cez balík, preto je protected prísnejší ako v Jave.
Prí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; // Dostupné, pretože v tom istom balíku
}
}
package pkg2;
public class C extends A {
void test() {
int val = x; // Dostupné, pretože podtrieda
}
}
// Kotlin
open class A {
protected val x = 10
}
class B : A() {
fun test() {
println(x) // Dostupné, pretože podtrieda
}
}
class C {
fun test() {
val a = A()
// println(a.x) // Chyba: `protected` nie je dostupné mimo triedy a jej podtried
}
}
Hlavná rozdielnosť je teda v tom, že v Kotlin-e protected neumožňuje prístup cez balík, iba cez dedičstvo, zatiaľ čo v Jave — aj jedno, aj druhé.