În acest articol, veți afla despre toate cele 4 modificatori de vizibilitate din Kotlin și despre modul în care funcționează în diferite scenarii.
Modificatorii de vizibilitate sunt cuvinte cheie care stabilesc vizibilitatea (accesibilitatea) claselor, obiectelor, interfeței, constructorilor, funcțiilor, proprietăților și setătorilor acestora. (Nu puteți seta modificatorul de vizibilitate pentru getters deoarece aceștia au întotdeauna aceeași vizibilitate ca cea a proprietății.)
În articolul Kotlin Class and Objects, ați aflat despre modificatorii de vizibilitate public
și private
pe scurt. Veți afla despre încă doi modificatori de vizibilitate protected
și internal
(precum public
și private
) în detaliu.
Modificatori de vizibilitate în interiorul pachetului
Un pachet organizează un set de funcții, proprietăți și clase, obiecte și interfețe conexe. Citire recomandată: Pachete Kotlin
Modificator | Descriere |
---|---|
public | declarațiile sunt vizibile peste tot |
privat | vizibil în interiorul fișierului care conține declarația |
intern | vizibil în interiorul aceluiași modul (un set de fișiere Kotlin compilate împreună) |
protejat | nu este disponibil pentru pachete (folosit pentru subclase) |
Notă: dacă modificatorul de vizibilitate nu este specificat, este public
implicit.
Să luăm un exemplu:
// nume fișier: hello.kt pachet test fun function 1 () () // public în mod implicit și vizibil peste tot private fun function2 () () // vizibil în interior hello.kt internal fun function3 () () // vizibil în interiorul același modul var nume = "Foo" // vizibil peste tot get () = câmp // vizibil în interiorul hello.kt (la fel ca proprietatea sa) set privat (valoare) (// vizibil în câmpul hello.kt câmp = valoare) clasă privată class1 () // vizibil în interiorul hello.kt
Modificatori de vizibilitate în cadrul claselor și interfețelor
Iată cum funcționează modificatorii de vizibilitate pentru membrii (funcții, proprietăți) declarate în interiorul unei clase:
Modificator | Descriere |
---|---|
public | vizibil pentru orice client care poate vedea clasa declarantă |
privat | vizibil numai în interiorul clasei |
protejat | vizibil în interiorul clasei și al subclaselor sale |
intern | vizibil pentru orice client din interiorul modulului care poate vedea clasa declarantă |
Notă: Dacă suprascrieți un protected
membru din clasa derivată fără a specifica vizibilitatea acestuia, vizibilitatea acestuia va fi, de asemenea protected
.
Să luăm un exemplu:
open class Base () (var a = 1 // public implicit private var b = 2 // private la Clasa de bază protejată open val c = 3 // vizibilă la bază și clasa derivată intern val d = 4 // vizibilă în interiorul aceluiași modul protejat fun e () () // vizibil pentru baza și clasa derivată) clasa Derivată: baza () (// a, c, d și e () din clasa bază sunt vizibile // b nu este vizibil override val c = 9 // c este protejat) fun main (args: Array) (val base = Base () // base.a și base.d sunt vizibile // base.b, base.c și base .e () nu sunt vizibile val derivat = Derivat () // derivat.c nu este vizibil)
Schimbarea vizibilității unui constructor
În mod implicit, vizibilitatea unui constructor este public
. Cu toate acestea, îl puteți schimba. Pentru aceasta, trebuie să adăugați în mod explicit un constructor
cuvânt cheie.
Constructorul este public
implicit în exemplul de mai jos:
clasa Test (val a: Int) (// cod)
Iată cum îi puteți schimba vizibilitatea.
clasa Test constructor privat (val a: Int) (// cod)
Aici este constructorul private
.
Notă: În Kotlin, funcțiile, variabilele și clasele locale nu pot avea modificatori de vizibilitate.