Kelas Internal Java
1. Apa itu kategori internal?
Definisi satu kelas ditempatkan di dalam kelas lain, dan kelas ini disebut kelas internal
2. Apa karakteristik kelas internal?
1. Kelas dalam masih merupakan kelas independen. Setelah kompilasi, kelas dalam akan dikompilasi menjadi file .class independen, tetapi didahului oleh nama kelas dan $ simbol kelas luar.
2. Kelas internal tidak dapat diakses dengan cara biasa. Kelas dalam adalah anggota kelas luar, sehingga kelas dalam dapat dengan bebas mengakses variabel anggota kelas luar, baik pribadi atau tidak.
3. Jika kelas internal dinyatakan statis, ia tidak dapat mengakses variabel anggota kelas eksternal sesuka hati. Pada saat ini, kelas internal hanya dapat mengakses variabel anggota statis dari kelas eksternal.
3. Apa kategori internal?
1. Kelas internal anggota
menyukai:
Paket com.test01; kelas publik A {// Kelas dalam B mewarisi testpojo dan mengimplementasikan antarmuka testInterface kelas B memperluas testpojo mengimplementasikan testInterface {// Metode bagian dalam B sendiri void run () {System.out.println ("I'm Running!"); } // Tulis ulang metode antarmuka public void testf () {System.out.println ("Menerapkan antarmuka!"); }} // hubungi kelas internal public void test () {b b = new b (); b.testf (); // Gunakan metode antarmuka penulisan ulang b.run (); // hubungi metode Anda sendiri b.testpojo (); // Metode panggilan mewarisi kelas induk} // Metode utama tes public static void main (string [] args) {a a = baru a (); a.test (); }} // Tentukan antarmuka, metode ini adalah testf () antarmuka testInterface {public void testf ();} // Tentukan metode kelas normal testpojo () class testpojo {public void testpojo () {System.out.println ("Saya adalah kelas pojo sederhana"); }} // Implementasikan untuk memanggil metode dalam kelas kelas dalam tekse {public static void main (string [] args) {ab b = baru a (). Baru b (); // Memanggil Kelas B dalam di Kelas A /** setara dengan kode berikut* A A = Baru A (); * Ab b = a.new b (); * */ b.testf (); // Gunakan metode antarmuka penulisan ulang b.run (); // Memanggil metode Anda sendiri b.testpojo (); // Memanggil metode yang mewarisi kelas induk}}2. Metode kelas internal
Paket com.test01; kelas publik pertest {public void test () {// Tentukan kelas metode ne {// tentukan metode internal class public void fle () {// tentukan metode internal class system.out.println ("I'm Flying!"); }}; baru ne (). fle (); // Memanggil metode kelas dalam} public static void main (string [] args) {new pertest (). Test (); //Tes}} Catatan: (1) Metode kelas internal hanya dapat dipakai dalam metode yang mendefinisikan kelas internal, dan tidak dapat dipakai di luar metode ini.
(2) Metode objek kelas internal tidak dapat menggunakan variabel lokal non-final dari metode di mana kelas dalam berada.
Karena variabel lokal dari metode ini ada di tumpukan, mereka hanya ada selama kehidupan metode. Ketika metode berakhir, struktur tumpukannya dihapus.
Variabel lokal menjadi sejarah. Namun, setelah metode selesai, objek kelas dalam yang dibuat dalam metode mungkin masih ada di heap!
Misalnya, jika referensi untuk itu diteruskan ke beberapa kode lain dan disimpan dalam variabel anggota. Karena variabel lokal tidak dapat dijamin memiliki umur panjang yang sama dengan metode objek kelas internal, objek kelas internal tidak dapat menggunakannya. (Pemahaman ini berasal dari Baidu Encyclopedia)
3. Kelas Internal Anonim
1) Abstrak kelas internal anonim
Paket com.anonymous; kelas publik AbstractClass {public void test () {// Metode ini adalah test testa a = testa baru () {// mengimplementasikan abstrak kelas abstrak @override public void run () {// mengimplementasikan abstract class system.out.println ("Saya menggunakan Abstrak Anonim dalam kelas dalam"); }}; a.run (); // Memanggil metode kelas dalam} public static void main (string [] args) {new abstractclass (). Test (); // test}} // Tentukan metode abstrak abstrak metode abstrak adalah run () abstrak kelas testa {public abstrak void run ();}2) Antarmuka kelas internal anonim
Paket com.anonymous; kelas publik testanonymous {myinterface m = myinterface baru () {// mengimplementasikan antarmuka public void eat () {// menulis ulang myinterface antarmuka metode metode.out.println ("Saya makan!"); }}; public void ss () {// metode ss m.eat (); // Panggil metode yang ditimpa} public static void main (string [] args) {new testanonymous (). Ss (); // test}} // Tentukan metode antarmuka sebagai EatInterface myInterface {public void eat ();}Catatan: Kelas dalam anonim dapat didefinisikan dalam metode atau di anggota kelas. Tidak peduli kelas batin anonim mana, mereka tidak dapat dipanggil langsung oleh kelas eksternal.
4. Apa peran kategori internal?
Setiap kelas dalam dapat mewarisi secara independen dari implementasi (antarmuka) sehingga apakah kelas periferal telah mewarisi implementasi tertentu (antarmuka) tidak berpengaruh pada kelas dalam. Tanpa kemampuan yang disediakan oleh kelas internal untuk mewarisi beberapa kelas konkret atau abstrak, beberapa masalah desain dan pemrograman sulit dipecahkan. Dari perspektif ini, kelas internal membuat solusi warisan berganda lengkap.
Antarmuka memecahkan beberapa masalah, sementara kelas internal secara efektif menerapkan "warisan berganda".
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!