Maison > développement back-end > C++ > Comment Java peut-il imiter la fonctionnalité de classe Friend de C ?

Comment Java peut-il imiter la fonctionnalité de classe Friend de C ?

Patricia Arquette
Libérer: 2024-12-24 16:53:22
original
590 Les gens l'ont consulté

How Can Java Mimic C  's Friend Class Functionality?

Réplication du concept « ami » en C en Java

En C, le concept « ami » permet aux classes de différents packages d'accéder à des fichiers non publics membres d'autres classes. Java n'a pas d'équivalent direct, mais il fournit une solution de contournement intelligente en utilisant des classes imbriquées.

Implémentation

Considérez deux classes, Roméo et Juliette, provenant de packages différents. Roméo souhaite accéder aux méthodes non publiques de Juliette sans la sous-classer. Voici comment y parvenir en utilisant des classes imbriquées :

// Juliet's package
public class Juliet {
    private void cuddle() {
        System.out.println("O Romeo, Romeo, wherefore art thou Romeo?");
    }
    
    // Signature security for cuddle
    public static class CuddleAllowed { private CuddleAllowed() {} }
    private static final CuddleAllowed cuddleAllowed = new CuddleAllowed();
    
    public void cuddle(Juliet.CuddleAllowed cuddle) {
        cuddle(); // Juliet can cuddle herself
        if (cuddle == cuddleAllowed) {
            System.out.println("Only Romeo can cuddle Juliet.");
        }
    }
}

// Romeo's package
public class Romeo {
    public static void cuddleJuliet() {
        Juliet juliet = new Juliet();
        juliet.cuddle(Juliet.cuddleAllowed); // Romeo can cuddle Juliet
    }
}
Copier après la connexion

Dans cet exemple :

  • Juliet.cuddleAllowed est une classe imbriquée avec un constructeur privé. Seule Juliet peut l'instancier.
  • Juliet.cuddle() est privée mais est accessible en interne ou à partir des instances Juliet.CuddleAllowed.
  • Romeo utilise l'instance cuddleAllowed pour accéder à cuddle(). Juliette ne fera des câlins que si l'instance est fournie par Roméo.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal