Wir haben untersucht, wie Kotlins "öffentlich", "intern", "geschützt", "privat" und Java "öffentlich", "Paket privat", "geschützt", "privat" wie einander aussehen.
Lassen Sie uns zunächst sehen, welche Zugriffsrechte sie haben.
public | Von überall zugänglich |
---|---|
protected | Kann nicht deklarieren |
package private | Kann von demselben Paket aus aufgerufen werden |
private | Kann nicht deklarieren |
public | Zugänglich von allen Klassen |
---|---|
protected | Kann von Unterklassen oder Klassen im selben Paket aus aufgerufen werden |
package private | Kann von Klassen im selben Paket aus aufgerufen werden |
private | Nur von der deklarierten Klasse aus zugänglich |
public | Von überall zugänglich |
---|---|
internal | Kann über dasselbe Modul aufgerufen werden |
protected | Kann nicht deklarieren |
private | Nur von der deklarierten Klasse aus zugänglich |
public | Zugänglich von allen Klassen |
---|---|
internal | Kann von Klassen im selben Modul aus aufgerufen werden |
protected | Nur über Unterklassen zugänglich |
private | Nur über die deklarierte Datei zugänglich |
Kommen wir von hier aus zum Hauptthema und sehen, was passiert, wenn die Zugriffsmodifikatoren von kotlin von Java aus angezeigt werden.
Kotlins Privatklassen gelten in Java als Paket privat.
A.kt
package com.example.model
private class A(name: String, age: Int, height: Int)
B.java
package com.example.model
public class B {
public B() {
A a = new A("taku", 23, 168); // OK
}
}
C.java
package com.example.ui
public class C {
public C(){
A a = new A("taku", 23, 168) // ERROR
}
}
Java hat keinen internen Modifikator. Daher wird alles, was in Kotlin als intern markiert ist, von Java als öffentlich angesehen. Wenn Sie jedoch ein Klassenmitglied sind, wird es verschleiert.
A.kt
package com.example.model
internal class A(val name: String, internal val age: Int, private val height: Int)
B.java
package com.example.model
public class B {
public B() {
A a = new A("taku", 23, 168); // OK
a.getName(); // OK
a.getAge(); // ERROR
a.getAge$production_sources_for_module_example(); // OK
a.getHeight(); // ERROR
}
}
Recommended Posts