English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Modificateurs de visibilité en Kotlin

Dans cet article, vous découvrirez les4Il existe plusieurs modificateurs d'accessibilité, ainsi que leur manière de fonctionner dans différentes situations.

Les modificateurs d'accessibilité sont des mots-clés utilisés pour définir la visibilité (accessibilité) des classes, des objets, des interfaces, des constructeurs, des fonctions, des propriétés et de leurs setters. (Les modificateurs d'accessibilité ne peuvent pas être définis pour les getters, car ils ont toujours la même accessibilité que les propriétés).

DansClasses et objets en KotlinDans cet article, vous avez brièvement découvert les modificateurs d'accessibilité public et private. Dans cet article, vous découvrirez en détail les deux autres modificateurs d'accessibilité protected et internal (ainsi que public et private).

Les modificateurs de visibilité à l'intérieur des paquets

Les paquets organisent un ensemble de fonctions, de propriétés et de classes, d'objets et d'interfaces liées

ModificateurDescription
publicVisible partout
privateVisible à l'intérieur du fichier contenant la déclaration
internalVisible à l'intérieur du même module (un ensemble de fichiers Kotlin compilés ensemble)
protectedInutilisable pour les paquets (utilisé pour les sous-classes)

Remarque :Si le modificateur de visibilité n'est pas spécifié, la valeur par défaut est public.

Laissez-nous prendre un exemple :

//Nom de fichier: hello.kt
package test
fun function1() {}   //Par défaut, il est public et visible partout
private fun function2() {}   //Visible à l'intérieur de hello.kt
internal fun function3() {}   //Visible dans le même module
var name = "Foo"   //Visible partout
    get() = field   //Visible à l'intérieur de hello.kt (comme ses propriétés)
    private set(value) {   //Visible à l'intérieur de hello.kt
        field = value
    {}
private class class1 {}   //Visible à l'intérieur de hello.kt

Modificateurs de visibilité dans les classes et les interfaces

Voici comment les modificateurs de visibilité fonctionnent pour les membres déclarés à l'intérieur d'une classe (fonctions, propriétés) :

ModificateurDescription
publicVisible pour tout client qui peut voir la déclaration de la classe
privateVisible uniquement à l'intérieur de la classe
protectedVisible dans la classe et ses sous-classes
internalLes clients du module peuvent voir toute déclaration de classe

Remarque :Si vous redéfinissez un membre protected dans une classe dérivée sans spécifier sa visibilité, sa visibilité sera également protected.

Laissez-nous prendre un exemple :

open class Base() {
    var a = 1                 //Par défaut, il est public
    private var b = 2         // La classe Base est privée
    protected open val c = 3  //Visible pour les classes Base et Derived
    internal val d = 4        //Visible dans le même module
    protected fun e() { }     //Visible pour les classes Base et Derived
{}
class Derived: Base() {
    // a, c, d, et e() sont tous les attributs de la classe Base sont visibles
    // b n'est pas visible
    override val c = 9        // c est protected
{}
fun main(args: Array<String>) {
    val base = Base()
    //base.a et base.d sont visibles
    // base.b, base.c et base.e() ne sont pas visibles
    val derived = Derived()
    // derived.c invisible
{}

Modifier la visibilité du constructeur

Par défaut, la visibilité du constructeur est public. Cependant, vous pouvez le changer. Pour cela, vous devez ajouter explicitement la clé mot-clé constructor.

Dans l'exemple suivant, le constructeur est par défaut public :

class Test(val a: Int) {
    // code
{}

Vous pouvez modifier sa visibilité en utilisant les méthodes suivantes.

class Test private constructor(val a: Int) {
    // code
{}

Le constructeur ici est privé.

Remarque :  Dans Kotlin, les fonctions locales, les variables et les classes ne peuvent pas avoir de modificateurs de visibilité.