Dans cet article, vous découvrirez les 4 modificateurs de visibilité de Kotlin et leur fonctionnement dans différents scénarios.
Les modificateurs de visibilité sont des mots-clés qui définissent la visibilité (accessibilité) des classes, des objets, de l'interface, des constructeurs, des fonctions, des propriétés et de leurs setters. (Vous ne pouvez pas définir le modificateur de visibilité des getters car ils ont toujours la même visibilité que celle de la propriété.)
Dans l'article Kotlin Class and Objects, vous avez découvert les modificateurs de visibilité public
et private
en bref. Vous découvrirez deux autres modificateurs de visibilité protected
et internal
(ainsi que public
et private
) en détail.
Modificateurs de visibilité à l'intérieur du package
Un package organise un ensemble de fonctions, propriétés et classes, objets et interfaces associés. Lecture recommandée: Kotlin Packages
Modificateur | La description |
---|---|
Publique | les déclarations sont visibles partout |
privé | visible à l'intérieur du fichier contenant la déclaration |
interne | visible à l'intérieur du même module (un ensemble de fichiers Kotlin compilés ensemble) |
protégé | non disponible pour les packages (utilisé pour les sous-classes) |
Remarque: si le modificateur de visibilité n'est pas spécifié, il l'est public
par défaut.
Prenons un exemple:
// nom du fichier: hello.kt package test fun function1 () () // public par défaut et visible partout private fun function2 () () // visible dans hello.kt internal fun function3 () () // visible dans le même module var name = "Foo" // visible partout get () = field // visible dans hello.kt (identique à sa propriété) private set (value) (// visible dans hello.kt field = value) private class class1 () // visible dans hello.kt
Modificateurs de visibilité à l'intérieur des classes et des interfaces
Voici comment les modificateurs de visibilité fonctionnent pour les membres (fonctions, propriétés) déclarés à l'intérieur d'une classe:
Modificateur | La description |
---|---|
Publique | visible par tout client qui peut voir la classe déclarante |
privé | visible à l'intérieur de la classe uniquement |
protégé | visible à l'intérieur de la classe et de ses sous-classes |
interne | visible par tout client à l'intérieur du module qui peut voir la classe déclarante |
Remarque: Si vous remplacez un protected
membre dans la classe dérivée sans spécifier sa visibilité, sa visibilité sera également protected
.
Prenons un exemple:
open class Base () (var a = 1 // public par défaut private var b = 2 // private to Base class protected open val c = 3 // visible par la base et la classe Derived internal val d = 4 // visible à l'intérieur du même module protected fun e () () // visible par la classe Base et la classe Derived) Dérivé: Base () (// a, c, d et e () de la classe Base sont visibles // b n'est pas visible override val c = 9 // c est protégé) fun main (args: Array) (val base = Base () // base.a et base.d sont visibles // base.b, base.c et base .e () ne sont pas visibles val dérivé = Derived () // dérivé.c n'est pas visible)
Modification de la visibilité d'un constructeur
Par défaut, la visibilité d'un constructeur est public
. Cependant, vous pouvez le changer. Pour cela, vous devez ajouter explicitement un constructor
mot-clé.
Le constructeur est public
par défaut dans l'exemple ci-dessous:
classe Test (val a: Int) (// code)
Voici comment vous pouvez modifier sa visibilité.
class Test constructeur privé (val a: Int) (// code)
Voici le constructeur private
.
Remarque: dans Kotlin, les fonctions, variables et classes locales ne peuvent pas avoir de modificateurs de visibilité.