L'autre jour, je l'ai utilisé dans une application pour smartphone avec le titre "Accéder au résumé des qualificatifs - Développement d'applications pour smartphone (Java / Kotlin / Objective-C / Swift / C # / F #)" J'ai résumé la comparaison des qualificatifs d'accès des langues, mais cette fois, je voudrais résumer les qualificatifs d'accès avec le thème "JVM language".
C'est un langage qui fonctionne sur JVM (Java Virtual Machine), et il existe de nombreux langages alternatifs Java en plus de Java. Cette fois, nous allons reprendre les principaux Groovy, Scala et Kotlin parmi eux et les résumer dans un tableau de comparaison avec Java.
Modificateur d'accès | Java | Groovy | Scala | Kotlin |
---|---|---|---|---|
public | Accessible de n'importe où | Accessible de n'importe où | Accessible de n'importe où | Accessible de n'importe où |
protected | Accessible à partir de la classe + classe dérivée dans le même package | Accessible de n'importe où | Accessible depuis la même classe + classe dérivée | 継承したAccessible à partir de la classe + classe dérivée dans le même package |
internal | (n'existe pas) | (n'existe pas) | (n'existe pas) | Accessible dans le même module |
private | Accessible dans le même périmètre * Vous pouvez également vous référer à la variable privée de la classe interne. |
Accessible de n'importe où * Cependant, super de la classe dérivée.*Non accessible avec |
Accessible dans le même périmètre | Accessible dans le même périmètre |
protected[nom du paquet] | (n'existe pas) | (n'existe pas) | Accessible depuis la classe dans le package spécifié + classe dérivée * Précisez uniquement le package auquel il appartient (une hiérarchie intermédiaire est également possible) |
(n'existe pas) |
private[nom du paquet] | (n'existe pas) | (n'existe pas) | Accessible dans le package spécifié * Précisez uniquement le package auquel il appartient (une hiérarchie intermédiaire est également possible) |
(n'existe pas) |
protected[nom de la classe] | (n'existe pas) | (n'existe pas) | Accessible de vous-même ou de la classe spécifiée + classe dérivée * Seules les classes en dehors de vous peuvent être spécifiées |
(n'existe pas) |
private[nom de la classe] | (n'existe pas) | (n'existe pas) | Accessible de vous-même ou d'une classe spécifiée * Seules les classes en dehors de vous peuvent être spécifiées |
(n'existe pas) |
protected[this] | (n'existe pas) | (n'existe pas) | Accessible depuis sa propre instance + classe dérivée | (n'existe pas) |
private[this] | (n'existe pas) | (n'existe pas) | Uniquement accessible depuis votre propre instance | (n'existe pas) |
Non précisé | Accessible dans le même package | Identique au public | Identique au public | Identique au public |
Groovy est compatible avec Java, vous pouvez donc utiliser des modificateurs d'accès similaires à Java, mais ils ne fonctionnent pas bien et vous pouvez accéder à tout de n'importe où (c'est public par défaut). .. Ce comportement est géré comme un bug, mais il semble qu'il soit encore loin d'être corrigé (vérifié par Groovy 2.4.12 lors de la rédaction de cet article). Scala a un qualificatif, qui se caractérise par un contrôle d'accès fin.
Les langages alternatifs autres que Java sont courants dans la mesure où ils deviennent "publics" lorsque rien n'est spécifié. "N'écrivez pas de mots clés pour le contrôle d'accès" ⇒ "Pas de contrôle d'accès" ⇒ "Accessible de n'importe où" Je pense que c'est intuitif et facile à comprendre.
[GROOVY-3010] fix private field visibility - ASF JIRA [GROOVY-7246] Access modifiers behave differently in Groovy when compared to Java. - ASF JIRA Mémo de classe Scala (Mémo de classe Scala de Hishidama) Modificateurs d'accès aux membres de la classe | notes hydrocul Première fois Kotlin. Je l'ai comparé à Java
Recommended Posts