首頁 >後端開發 >C++ >Java 如何模仿 C 的友元類別功能?

Java 如何模仿 C 的友元類別功能?

Patricia Arquette
Patricia Arquette原創
2024-12-24 16:53:22595瀏覽

How Can Java Mimic C  's Friend Class Functionality?

在Java 中複製C 的「friend」概念

在C 中,「friend」概念允許不同套件中的類別存取非公共物件其他班級的成員。 Java 缺乏直接的等效項,但它提供了一種使用巢狀類別的巧妙解決方法。

實作

考慮來自不同套件的兩個類,Romeo 和 Juliet。羅密歐希望訪問朱麗葉的非公共方法而不將其子類化。以下是如何使用巢狀類別來實現它:

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

在此範例中:

  • Juliet.cuddleAllowed 是一個具有私有建構子的巢狀類別。只有 Juliet 可以實例化它。
  • Juliet.cuddle() 是私有的,但可以在內部或從 Juliet.CuddleAllowed 實例存取。
  • Romeo 使用 cuddleAllowed 實例來存取 cuddle()。只有當羅密歐提供實例時,朱麗葉才會擁抱。

以上是Java 如何模仿 C 的友元類別功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn