Accéder au résumé des qualificatifs - Édition du langage JVM (Java / Groovy / Scala / Kotlin)

introduction

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".

Quel est le langage JVM?

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.

Tableau de comparaison

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.

référence

[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

Accéder au résumé des qualificatifs - Édition du langage JVM (Java / Groovy / Scala / Kotlin)
Modificateur d'accès [Java]
Sélection en plusieurs étapes (Java / Groovy / Scala)
Accédez au résumé des qualificatifs - Développement d'applications pour smartphone (Java / Kotlin / Objective-C / Swift / C # / F #)
[Java Silver] Résumé des points de modification d'accès
Relation entre les modificateurs d'accès kotlin et java