Kata pengantar
Penutupan adalah objek yang dapat dipanggil yang mencatat beberapa informasi dari ruang lingkup di mana ia dibuat. Melalui definisi ini, dapat dilihat bahwa kelas dalam adalah penutupan yang berorientasi pada objek, karena tidak hanya berisi informasi tentang objek kelas periferal (ruang lingkup membuat kelas dalam), tetapi juga secara otomatis memiliki referensi ke objek kelas periferal. Dalam peran ini, kelas dalam memiliki hak untuk mengoperasikan semua anggota, termasuk anggota pribadi.
Salah satu masalah paling kontroversial di Java adalah diyakini bahwa Java harus mencakup beberapa mekanisme seperti pointer untuk memungkinkan panggilan balik. Melalui panggilan balik, objek dapat membawa beberapa informasi yang memungkinkannya untuk memanggil objek awal di beberapa titik selanjutnya. Jika panggilan balik diimplementasikan melalui pointer, maka Anda hanya bisa berharap bahwa programmer tidak akan menyalahgunakan pointer.
1. Kelas internal anggota
Kelas dalam dapat dianggap sebagai anggota. Kelas dalam anggota dapat mengakses semua properti anggota dan metode anggota dari kelas eksternal tanpa syarat.
class outterclass {// kelas eksternal int private int in = 0; Static Int Inn = 4; Public OutterClass (int in) {this.in = in; } class innerClass {// kelas dalam public void output () {System.out.println (in); System.out.println (Inn); }}}Ketika kelas internal anggota memiliki variabel anggota atau metode dengan nama yang sama dengan kelas eksternal, anggota kelas internal anggota diakses secara default. Jika Anda ingin mengakses anggota dengan nama yang sama dari kelas eksternal, Anda perlu mengaksesnya dalam bentuk berikut:
OutterClass (Kelas Eksternal) .MBember ini
Ketika kelas eksternal mengakses kelas internal, Anda harus terlebih dahulu membuat objek kelas internal anggota, dan kemudian mengaksesnya melalui referensi ke objek ini.
class outterclass {private int in = 0; Static Int Inn = 4; OutterClass publik (int in) {InnerClass inner = new InnerClass (); this.in = inner.innernum; } class innerclass {// kelas dalam public int innernum = 1; public void output () {System.out.println (IN); System.out.println (Inn); int a = outterclass.this.inn; }}}Kelas internal anggota ada berdasarkan kelas eksternal, yaitu, jika Anda ingin membuat objek kelas internal anggota, premisnya adalah objek kelas eksternal harus ada. Cara umum untuk membuat objek kelas internal anggota adalah sebagai berikut:
kelas kelas publik {public static void main () {outterclass oc = outterclass baru (3); Outterclass.innerclass in = oc.new innerclass (); }} 2. Kategori internal lokal
Kelas dalam lokal seperti variabel lokal dalam suatu metode, dan tidak dapat memiliki pengubah public , protected , private , dan static .
class outterclass {public outterclass (int in) {class innerclass {// class bagian dalam lokal int innernum = 1; }}} 3. Kelas internal bersarang
Kelas dalam bersarang adalah kelas internal yang dimodifikasi sebagai static . Kelas dalam yang dinyatakan sebagai static tidak memerlukan koneksi antara objek kelas dalam dan objek kelas luar, yaitu, kita dapat secara langsung merujuk ke outer.inner , yaitu, kita tidak perlu membuat kelas luar atau kelas dalam.
class outterclass {public outterclass (int in) {} static class innerclass {// class bagian dalam lokal int innernum = 1; }} kelas public kelas {public static void main () {outterclass.innerclass in = outterclass.innerClass (); }} 4. Kategori internal anonim
Kelas internal anonim adalah yang paling kami gunakan karena kami tidak ingin memberi mereka nama, jadi kami memiliki anonimitas. Kelas internal anonim perlu didefinisikan sebelumnya.
btnsan.setOnClickListener (newonClickListener () {@Override publicVoidOnclick (view v) {}}); 5. Penutupan dan panggilan balik
Penutupan adalah objek yang dapat dipanggil, yang menyimpan informasi tentang ruang lingkup yang membuatnya. Java tidak dapat secara eksplisit mendukung penutupan, tetapi di Java, penutupan dapat diimplementasikan melalui "Antarmuka + Kelas Dalam".
Sebagai contoh: seorang programmer antarmuka dan penulis kelas dasar memiliki work yang sama dan nama metode yang sama, tetapi artinya sangat berbeda. Pada saat ini, diperlukan penutupan.
class writer {// penulis base class void work () {};} Programmer antarmuka {// Programmer void work ();} Kode implementasi penutupan adalah sebagai berikut:
Public Class WriterProgrammer memperluas penulis {@Override public void work () {// writing} public void code () {// tulis kode} class Programmerinner mengimplementasikan programmer {@Override public void work () {code (); }}} Di subkelas, kelas internal yang mengikuti aturan antarmuka programmer didefinisikan, dan kemudian kelas internal mengimplementasikan metode callback code work() Callback code() programmer, dan secara langsung mengimplementasikan metode work() dari penulis kelas induk dalam subkelas.
6. Peran kategori internal
Kelas internal dapat diterapkan dengan baik untuk disembunyikan.
Secara umum, kelas non-internal tidak mengizinkan izin private dan protected , tetapi kelas internal dapat
Kelas Dalam memiliki akses ke semua elemen kelas periferal
Tetapi beberapa warisan tercapai
Ini dapat menghindari memodifikasi antarmuka dan menerapkan panggilan dua metode dengan nama yang sama di kelas yang sama.
7. Ringkasan
Di atas adalah seluruh konten artikel ini. Saya berharap ini akan membantu semua orang belajar atau menggunakan Java. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi.