Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kefungsian Kelas Rakan Java Mimic C?

Bagaimanakah Kefungsian Kelas Rakan Java Mimic C?

Patricia Arquette
Patricia Arquetteasal
2024-12-24 16:53:22594semak imbas

How Can Java Mimic C  's Friend Class Functionality?

Menerap Konsep 'rakan' C dalam Java

Dalam C , konsep 'rakan' membenarkan kelas dalam pakej yang berbeza untuk mengakses bukan awam ahli kelas lain. Java tidak mempunyai persamaan langsung, tetapi ia menyediakan penyelesaian yang bijak menggunakan kelas bersarang.

Pelaksanaan

Pertimbangkan dua kelas, Romeo dan Juliet, daripada pakej yang berbeza. Romeo ingin mengakses kaedah bukan umum Juliet tanpa mengklasifikasikannya. Begini cara untuk mencapainya menggunakan kelas bersarang:

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

Dalam contoh ini:

  • Juliet.cuddleAllowed ialah kelas bersarang dengan pembina peribadi. Hanya Juliet boleh membuat seketika.
  • Juliet.cuddle() adalah peribadi tetapi boleh diakses secara dalaman atau daripada Juliet.CuddleAllowed tika.
  • Romeo menggunakan tika cuddleAllowed untuk mengakses cuddle(). Juliet akan berpelukan hanya jika instance disediakan oleh Romeo.

Atas ialah kandungan terperinci Bagaimanakah Kefungsian Kelas Rakan Java Mimic C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn