Heim >Backend-Entwicklung >C++ >Wie kann Java die Friend-Class-Funktionalität von C nachahmen?

Wie kann Java die Friend-Class-Funktionalität von C nachahmen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-24 16:53:22599Durchsuche

How Can Java Mimic C  's Friend Class Functionality?

Replikation des C-„Friend“-Konzepts in Java

In C ermöglicht das „Friend“-Konzept Klassen in verschiedenen Paketen den Zugriff auf nicht-öffentliche Pakete Mitglieder anderer Klassen. In Java fehlt ein direktes Äquivalent, aber es bietet einen cleveren Workaround mit verschachtelten Klassen.

Implementierung

Betrachten Sie zwei Klassen, Romeo und Juliet, aus verschiedenen Paketen. Romeo möchte auf Julias private Methoden zugreifen, ohne sie in eine Unterklasse zu unterteilen. So erreichen Sie dies mithilfe verschachtelter Klassen:

// 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
    }
}

In diesem Beispiel:

  • Juliet.cuddleAllowed ist eine verschachtelte Klasse mit einem privaten Konstruktor. Nur Juliet kann es instanziieren.
  • Juliet.cuddle() ist privat, kann aber intern oder über Juliet.CuddleAllowed-Instanzen aufgerufen werden.
  • Romeo verwendet die cuddleAllowed-Instanz, um auf cuddle() zuzugreifen. Julia wird nur kuscheln, wenn die Instanz von Romeo bereitgestellt wird.

Das obige ist der detaillierte Inhalt vonWie kann Java die Friend-Class-Funktionalität von C nachahmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn