Rumah >Java >javaTutorial >Hubungan antara pengubah akses fungsi Java dan kelas dalaman tanpa nama

Hubungan antara pengubah akses fungsi Java dan kelas dalaman tanpa nama

王林
王林asal
2024-04-25 15:33:01658semak imbas

Pengubah suai akses fungsi Java menentukan skop keterlihatan fungsi tersebut, termasuk awam, dilindungi, lalai dan peribadi. Sebagai kelas di dalam kelas luar, kelas dalam tanpa nama boleh mengakses semua ahli bukan persendirian kelas luar, jadi hak akses fungsinya berkaitan dengan hak akses fungsi kelas luar.

Java 函数的访问权限修饰符之与匿名内部类的关系

Hubungan antara pengubah suai akses fungsi Java dan kelas dalaman tanpa nama

Pengubah suai akses fungsi Java menentukan dari mana fungsi itu boleh diakses. Pengubah suai ini termasuk:

  • awam: boleh diakses dari mana-mana sahaja
  • dilindungi: boleh diakses dari pakej atau sub-pakej yang sama
  • lalai (pakej): hanya boleh diakses dari pakej yang sama
  • Boleh diakses hanya dalam kelas di mana fungsi ditakrifkan
Kelas dalaman tanpa nama

ialah kelas dalam Java yang ditakrifkan dalam kelas tanpa menyatakan nama. Ia biasanya digunakan untuk mencipta objek sekali guna, seperti melaksanakan pengendali acara atau pembanding. Kelas dalaman tanpa nama boleh mengakses semua ahli bukan persendirian kelas luar. Oleh itu, hak akses fungsi dalam kelas dalaman tanpa nama berkaitan dengan hak akses fungsi dalam kelas luarnya. Contohnya:

public class OuterClass {

    private int privateField = 1;
    protected int protectedField = 2;
    int defaultField = 3;
    public int publicField = 4;

    public void someMethod() {
        new Runnable() {

            @Override
            public void run() {
                // 内部类可以访问所有非私有成员变量
                System.out.println(protectedField);
                System.out.println(defaultField);
                System.out.println(publicField);
            }
        }.run();
    }
}

Dalam kod di atas, fungsi dalam kelas dalaman tanpa nama boleh mengakses ProtectedField, defaultField dan publicField kerana ia tidak swasta daripada.

protectedFielddefaultFieldpublicField,因为它们不是私有的。

实战案例:

假设我们有一个 EventProcessor 接口,它定义了一个 process() 方法。我们想创建一个匿名内部类来实现 process() 方法,该方法可以访问外部类中的数据。

public class Main {

    private String data = "Hello";

    public static void main(String[] args) {
        EventProcessor processor = new EventProcessor() {

            @Override
            public void process() {
                // 匿名内部类可以访问外部类中的 data 成员变量
                System.out.println(data);
            }
        };

        processor.process();
    }
}

在这种情况下,只要 dataKes praktikal:

🎜🎜Andaikan kita mempunyai antara muka EventProcessor, yang mentakrifkan kaedah process(). Kami ingin mencipta kelas dalaman tanpa nama yang melaksanakan kaedah process(), yang boleh mengakses data daripada kelas luar. 🎜rrreee🎜Dalam kes ini, selagi pembolehubah ahli data bukan peribadi, fungsi dalam kelas dalaman tanpa nama boleh mengaksesnya daripada pakej atau subpakej yang sama. 🎜

Atas ialah kandungan terperinci Hubungan antara pengubah akses fungsi Java dan kelas dalaman tanpa nama. 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