1.1.50.10. fejezet, Láthatóság
Beküldte pzoli - 2024, április 20 - 7:35du
// file name: example.kt package foo private fun foo() { ... } // visible inside example.kt public var bar: Int = 5 // property is visible everywhere private set // setter is visible only in example.kt internal val baz = 6 // visible inside the same module
Top level elemektől kezdve minden osztály és azok tulajdonságain, konstruktorain vagy metódusain át, az interfészek és azok minden eleme rendelkezhet láthatósági jelöléssel. Alapértelmezetten minden public láthatóságú.
Osztályok tagjai
- private azt jelenti, hogy a tag csak ezen az osztályon belül látható (beleértve annak összes tagját).
- protected azt jelenti, hogy a tag láthatósága megegyezik a private jelöltével, de az alosztályokban is látható
- internal azt jelenti, hogy a modulon belüli (nem package hanem egy maven projekt vagy gradle projekt) bármely elem, ami látja a deklaráló osztályt, látja annak tagjait
- public azt jelenti, hogy minden elem, ami látja a deklaráló osztályt, látja annak tagjait
Például:
open class Outer { private val a = 1 protected open val b = 2 internal open val c = 3 val d = 4 // public by default protected class Nested { public val e: Int = 5 } } class Subclass : Outer() { // a is not visible // b, c and d are visible // Nested and e are visible override val b = 5 // 'b' is protected override val c = 7 // 'c' is internal } class Unrelated(o: Outer) { // o.a, o.b are not visible // o.c and o.d are visible (same module) // Outer.Nested is not visible, and Nested::e is not visible either }
Konstruktor láthatósága:
class C private constructor(a: Int) { ... }
Alapértelmezettként a konstruktorok public láthatóságúak. Lokális változóknak, funkcióknak és osztályoknak nincs láthatósági besorolása.
- A hozzászóláshoz be kell jelentkezni