Java Internal Class dan Instantiation <BR /> di Java, diizinkan untuk mendefinisikan kelas lain di dalam satu kelas (atau metode atau blok pernyataan), yang disebut kelas dalam (kelas dalam), dan kadang -kadang juga disebut kelas bersarang (kelas bersarang ).
Ada hubungan logis antara kelas dalam dan kelas luar yang merangkumnya.
Alasan utama untuk menggunakan kelas dalam adalah:
Kelas dalam dapat mengakses data di kelas luar, termasuk data pribadi.
Kelas dalam dapat disembunyikan dari kelas lain dalam paket yang sama.
Ketika Anda ingin mendefinisikan fungsi panggilan balik dan tidak ingin menulis banyak kode, lebih mudah menggunakan kelas internal anonim.
Mengurangi konflik penamaan di kelas.
Silakan lihat contoh berikut:
Public Outer {private int size; = outer.new Inner (); kelas dalam.
Kode ini mendefinisikan luar kelas luar, yang berisi bagian dalam kelas dalam. Mengomentari pernyataan kesalahan dan menyusunnya akan menghasilkan dua file .class: Outer.class dan Outer $ inner.class. Artinya, kelas internal akan dikompilasi ke dalam file bytecode independen.
Kelas internal adalah fenomena kompiler yang tidak ada hubungannya dengan mesin virtual. Kompiler akan menerjemahkan kelas internal ke dalam file kelas reguler yang memisahkan nama kelas eksternal dari nama kelas internal dengan simbol $, dan mesin virtual tidak akan tahu tentang hal itu.
Catatan: Harus ada objek kelas eksternal sebelum objek kelas dalam dihasilkan, karena kelas dalam perlu mengakses variabel anggota di kelas eksternal, dan variabel anggota harus dipakai untuk masuk akal.
Kelas internal adalah fitur baru dari Java 1.1.
Kategori internal tampaknya telah menambahkan beberapa fitur yang indah dan menarik tetapi tidak perlu. Tutorial ini tidak bermaksud memberikan jawaban positif untuk pertanyaan ini.
Kelas batin Java statis, kelas dalam anonim, kelas dalam anggota dalam dan kelas dalam lokal dapat statis, dan dapat menggunakan kontrol akses publik, terlindungi dan pribadi, sementara kelas eksternal hanya dapat menggunakan publik, atau default.
Kelas internal anggota
Kelas yang didefinisikan secara langsung di dalam kelas eksternal (bukan di dalam metode atau blok kode) adalah kelas dalam berbasis anggota, yang dapat secara langsung menggunakan semua variabel dan metode kelas eksternal, bahkan pribadi. Jika kelas eksternal ingin mengakses variabel anggota dan metode kelas dalam, itu perlu diperoleh melalui objek kelas dalam.
Silakan lihat kode berikut:
Public Outer {private int size;
Kelas dalam seperti anggota seperti anggota biasa dari kelas eksternal.
Kelas batin bergaya anggota dapat menggunakan berbagai pengubah, termasuk publik, terlindungi, pribadi, statis, final, dan abstrak, atau mereka dapat ditulis tanpa tulisan.
Jika ada pengubah statis, itu adalah level kelas, jika tidak itu adalah tingkat objek. Level kelas dapat diakses secara langsung melalui kelas eksternal, dan tingkat objek perlu dibuat untuk menjadi objek eksternal sebelum mengaksesnya.
Tidak ada anggota statis yang tidak dapat dinyatakan dalam kelas dalam non-statis.
Kelas internal dapat dipanggil satu sama lain, misalnya:
Kelas A {// B dan C dapat memanggil satu sama lain kelas B {} kelas C {}}
Akses ke kelas internal anggota
Objek referensi catatan kelas dalam ke objek kelas luar yang mereka andalkan dalam bentuk variabel anggota, sehingga objek kelas luar dapat ditemukan dan anggotanya dapat diakses. Variabel anggota ini secara otomatis ditambahkan ke kelas dalam non-statis oleh sistem, dengan konvensi nama "outclassname.ini".
1) Saat menggunakan variabel dan metode non-statis yang didefinisikan di kelas dalam, Anda harus terlebih dahulu membuat objek kelas luar, kemudian membuat objek kelas dalam dengan operator "OutObjectName.NEW", dan kemudian panggil metode tersebut kelas dalam, seperti yang ditunjukkan di bawah ini:
Demo Public {public static void Main (String [] args) {Outer Outer = New Outer (); ;
2) Kelas dalam statis setara dengan anggota statis dari kelas eksternal. Contohnya adalah sebagai berikut:
Demo Public {public static void Main (String [] args) {outer.inner inner = new Outer.inner (); doStuff () {size ++;
Hasil Menjalankan:
ukuran = 1
3) Karena kelas dalam dapat secara langsung mengakses komponen kelas luarnya, penamaan konflik juga akan terjadi ketika kelas dalam memiliki atribut atau metode nama yang sama di kelas luarnya. Jadi saat menelepon beberapa lapisan, Anda harus menentukannya sebagai berikut:
Kelas Publik {Ukuran int privat; / ukuran kelas eksternal}}}
Kelas internal lokal
Kelas lokal adalah kelas yang ditentukan dalam blok kode. Mereka hanya terlihat di blok kode yang mendefinisikannya.
Kelas lokal memiliki beberapa karakteristik penting:
Kelas lokal bisa abstrak.
Silakan lihat kode berikut:
Public Outer {Public Static Int Total_Number = 5; void Innertest () {System.out.println (total_number); Metode Lokal (Usia);
Hasil Menjalankan:
512315
Kelas internal anonim
Kelas internal anonim adalah bentuk khusus dari kelas internal lokal, yaitu, tidak ada nama variabel yang menunjuk ke instance dari kelas ini, dan implementasi kelas spesifik akan ditulis dalam kelas internal ini.
Catatan: Kelas anonim harus mewarisi kelas induk atau mengimplementasikan antarmuka.
Tidak dapat menggunakan kelas dalam anonim untuk mengimplementasikan metode abstrak:
Abstrak Person {public void eat ();} kelas anak memperluas orang {public void eat () {System.out.println ("Eat Something"); args) {orang p = new child ();
Hasil Menjalankan:
makan sesuatu
Seperti yang Anda lihat, kami mewarisi kelas orang dengan anak, dan kemudian menerapkan contoh anak, mengubahnya menjadi referensi ke kelas orang tersebut. Tetapi jika kelas anak di sini hanya digunakan sekali, bukankah akan merepotkan untuk menulisnya sebagai kelas mandiri?
Pada saat ini, kelas internal anonim diperkenalkan. Implementasi Menggunakan Kelas Dalam Anonim:
Abstrak class person {public abstrak void eat ();} Demo kelas publik {public static void main (string [] args) {// mewarisi orang kelas baru () {public void e at () {System.out.println ( "Eat Something");
Seperti yang Anda lihat, kelas anonim mewarisi kelas orang dan mengimplementasikan metode kelas abstrak dalam kawat gigi keriting.
Sintaks kelas internal relatif kompleks dan jarang digunakan dalam pengembangan aktual.