Junior — Middle
Erklären Sie die Unterschiede bei der Verwendung des Zugriffsmodifikators protected in Java und Kotlin.
sobes.tech KI
Antwort von AI
In Java bedeutet der Zugriffsschutz protected, dass das Klassenmitglied zugänglich ist:
- Innerhalb der Klasse selbst
- In allen erbenden Klassen (auch wenn sie in einem anderen Paket sind)
- In allen Klassen im selben Paket
Das heißt, protected in Java ist eine Kombination aus Zugriff durch Vererbung und durch Paket.
In Kotlin bedeutet protected jedoch, dass der Zugriff nur innerhalb der Klasse selbst und ihrer Unterklassen möglich ist, aber nicht aus anderen Klassen im selben Paket. In Kotlin gibt es kein Konzept des Paketzugriffs, daher ist protected strenger als in Java.
Beispiel:
// 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; // Zugänglich, da im selben Paket
}
}
package pkg2;
public class C extends A {
void test() {
int val = x; // Zugänglich, da Unterklasse
}
}
// Kotlin
open class A {
protected val x = 10
}
class B : A() {
fun test() {
println(x) // Zugänglich, Unterklasse
}
}
class C {
fun test() {
val a = A()
// println(a.x) // Fehler: `protected` ist außerhalb der Klasse und ihrer Unterklassen nicht zugänglich
}
}
Daher besteht der Hauptunterschied darin, dass in Kotlin protected keinen Paketzugriff erlaubt, nur Vererbung, während in Java beides möglich ist.