Rumah >Java >javaTutorial >Kelas Dalaman Java dan Kelas Bersarang
Di Java, kelas dalam hanyalah kelas yang ditakrifkan dalam kelas atau antara muka lain. Kelas dalaman membantu mengekalkan kod yang berkaitan bersama-sama, menjadikan program lebih mudah dibaca dan difahami. Mereka juga membenarkan kelas dalaman mengakses ahli peribadi kelas luar, menjadikannya lebih mudah untuk mengatur dan melindungi kod. Dalam artikel ini, kami akan meneroka asas kelas dalaman dan bersarang di Java.
Kelas dalaman Java telah diperkenalkan untuk mengendalikan senario di mana satu set kelas secara logik tergolong bersama tetapi tidak perlu diakses di luar kelas yang mengandunginya. Dengan mentakrifkan kelas dalam dalam kelas luar, pembangun Java boleh meningkatkan kebolehbacaan kod, meningkatkan modulariti dan mengakses ahli persendirian kelas luar, mencapai struktur yang lebih terkapsul, seperti dunia nyata dalam pengaturcaraan berorientasikan objek.
Kelebihan Menggunakan Kelas Dalaman:
Java membahagikan kelas bersarang kepada dua kategori luas: kelas bersarang bukan statik (biasanya dirujuk sebagai kelas dalam) dan kelas bersarang statik. Dalam kategori ini, empat jenis kelas dalaman yang berbeza tersedia, masing-masing dengan ciri unik:
Mari kita terokai setiap jenis dengan contoh untuk memahami perbezaannya dan kes penggunaan tertentu.
kelas dalaman ahli ialah kelas bukan statik yang ditakrifkan secara langsung dalam kelas luar. Kelas dalaman jenis ini boleh mengakses semua ahli kelas luar, termasuk kelas peribadi. Ia berguna apabila kita ingin merangkum beberapa fungsi yang berkaitan secara langsung dengan kelas luar tetapi tidak semestinya perlu didedahkan.
Contoh Kelas Dalaman Ahli:
public class OuterClass { private int outerVar = 100; // Member inner class public class InnerClass { public void display() { System.out.println("Outer variable: " + outerVar); } } public static void main(String[] args) { OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.new InnerClass(); inner.display(); } }
Output:
public class OuterClass { private int outerVar = 100; // Member inner class public class InnerClass { public void display() { System.out.println("Outer variable: " + outerVar); } } public static void main(String[] args) { OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.new InnerClass(); inner.display(); } }
Kaedah kelas dalaman tempatan ditakrifkan dalam kaedah kelas luar. Kelas ini hanya boleh diakses dalam kaedah yang ditakrifkan. Ia biasanya digunakan apabila bahagian fungsi tertentu diperlukan hanya dalam kaedah tertentu.
Contoh Kaedah Kelas Dalaman Tempatan:
Outer variable: 100
Output:
public class OuterClass { public void display() { class InnerClass { public void print() { System.out.println("Method Local Inner Class"); } } InnerClass inner = new InnerClass(); inner.print(); } public static void main(String[] args) { OuterClass outer = new OuterClass(); outer.display(); } }
Satu kelas bersarang statik berkelakuan berbeza daripada kelas dalam kerana ia tidak mempunyai rujukan kepada tika kelas luar. Kelas ini hanya boleh mengakses ahli statik kelas luar dan sering digunakan apabila kefungsian kelas bersarang berkait rapat dengan kelas luar tetapi tidak memerlukan instance daripadanya.
Contoh Kelas Bersarang Statik:
Method Local Inner Class
Output:
public class OuterClass { private static int staticVar = 10; // Static nested class static class StaticNestedClass { public void display() { System.out.println("Static variable: " + staticVar); } } public static void main(String[] args) { OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass(); nested.display(); } }
kelas dalaman tanpa nama ialah sejenis kelas dalaman tanpa nama tertentu. Kelas ini digunakan apabila terdapat keperluan untuk mengatasi atau melaksanakan kaedah dengan cepat, selalunya dengan antara muka atau kelas abstrak.
Contoh Kelas Dalaman Tanpa Nama:
Static variable: 10
Output:
public class Test { public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { System.out.println("Anonymous Inner Class"); } }; new Thread(r).start(); } }
Feature | Inner Class | Static Nested Class |
---|---|---|
Association | Associated with an instance of the outer class | Not associated with an instance of the outer class |
Access to Outer Class Members | Can access all members, including private | Can only access static members |
Usage | Useful for event handling and encapsulation | Useful for utility classes related to the outer class without accessing instance-specific data |
Meningkatkan Kerumitan: Kelas dalaman boleh menjadikan kod lebih sukar dibaca, terutamanya apabila terdapat berbilang lapisan kelas dalaman. Kerumitan tambahan ini boleh mengelirukan pembangun yang tidak biasa dengan struktur kod.
Pengurusan Memori: Kelas dalaman memegang rujukan kepada contoh kelas luar. Ini boleh meningkatkan penggunaan memori dan boleh menyebabkan kebocoran memori jika kejadian kelas dalaman digunakan untuk operasi jangka panjang, terutamanya dalam pembangunan Android.
Pengujian Sukar dan Nyahpepijat: Memandangkan kelas dalam digandingkan rapat dengan kelas luarnya, ujian dan penyahpepijatan boleh menjadi lebih mencabar. Kod dalam kelas dalam selalunya bergantung pada konteks kelas luar, yang boleh menyukarkan ujian terpencil.
Kebolehgunaan Semula Kod Dikurangkan: Kelas dalaman biasanya kurang boleh digunakan semula kerana ia digandingkan rapat dengan kelas luar. Menggunakan semula kelas dalaman di luar skop yang dimaksudkan biasanya memerlukan pengubahsuaian atau penstrukturan semula yang ketara.
Sekatan Statik: Kelas dalaman bukan statik tidak boleh mengandungi ahli atau kaedah statik, yang mengehadkan fleksibilitinya dalam situasi tertentu.
Kelas Peringkat Atas: Daripada mencipta kelas dalaman, tentukan kelas peringkat atas yang berasingan. Ini berguna apabila kelas tidak memerlukan akses terus ke medan dan kaedah peribadi kelas luar. Ia juga meningkatkan kebolehbacaan kod dan kebolehgunaan semula.
Kelas Bersarang Statik: Jika anda tidak memerlukan kelas dalam untuk mengakses ahli kelas luar bukan statik, anda boleh menggunakan kelas bersarang statik. Kelas bersarang statik tidak mempunyai rujukan kepada tika kelas luar, jadi kelas itu lebih cekap ingatan.
Kelas Tanpa Nama dengan Antara Muka Fungsian: Untuk pelaksanaan sekali guna, terutamanya untuk antara muka dengan satu kaedah (antara muka berfungsi), gunakan kelas tanpa nama atau ungkapan lambda. Ini adalah alternatif ringan kepada kelas dalaman dan boleh digunakan sebaris.
Corak Kilang: Jika anda memerlukan akses terkawal kepada kejadian kelas dan ingin mengelakkan kelas dalaman, pertimbangkan untuk menggunakan Corak Reka Bentuk Kilang. Pendekatan ini membantu membuat kejadian objek tanpa mendedahkan butiran pelaksanaan, mengekalkan kod modular dan boleh diselenggara.
Dengan memahami pelbagai jenis kelas dalaman dan aplikasi uniknya, anda boleh menulis kod Java yang lebih modular dan boleh diselenggara.
Jika anda mendapati gambaran keseluruhan ini membantu, pastikan anda mengikuti lebih banyak siaran tentang topik Java lanjutan, petua dan amalan terbaik untuk meningkatkan perjalanan pengaturcaraan anda!
public class OuterClass { private int outerVar = 100; // Member inner class public class InnerClass { public void display() { System.out.println("Outer variable: " + outerVar); } } public static void main(String[] args) { OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.new InnerClass(); inner.display(); } }
Atas ialah kandungan terperinci Kelas Dalaman Java dan Kelas Bersarang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!