Ada 4 bentuk kelas internal Java yang biasanya kami gunakan: kelas internal umum, kelas internal lokal, kelas internal anonim, dan kelas internal statis. Berikut ini adalah tes yang saya buat untuk menggambarkan karakteristik berbagai kelas internal.
Mengenai karakteristik kelas internal, kode ini dijelaskan secara rinci, sebagai berikut.
/** Tes Kelas Internal Java** Hasil Refleksi InterOBJ:** Private Int I* Private Interobj $ Intera Ia* Public InterObj ()* Public Static Void Main (java.lang.string [])* private int geti ()* public void p ()* public void pi ()* public void pp ()* public static pl public P ()* public void pi ()* Public void PP ()* public static public static P () public void pi ()* Public void PP ()* Public static public publ public void pppp()* below is the compiler automatically generated static methods for accessing private attributes or method package level* static int access$0(InterObj)*/public class InterObj {private int i=8;private InterA ia=null;public InterObj(){ia=new InterA();}private int getI(){return i;}public void p () {pi (); pp (); ppp (); pppp (); pppp ();}/ * * Dalam kelas internal umum, metode dan properti dapat diakses pada tingkat mana pun di "kelas mantel". Kelas jaket juga dapat* mengakses metode dan properti di tingkat mana pun di "kelas internal". Karena kelas dalam dapat memiliki referensi ke objek kelas mantel. * Untuk metode dan atribut pribadi yang perlu diakses oleh kelas internal, kompiler akan secara otomatis menghasilkan metode statis tingkat "paket" yang sesuai dengan * metode dan atribut pribadi. Metode-metode ini perlu menggunakan objek kelas eksternal sebagai parameter *, sehingga Anda dapat mengakses metode pribadi dan * atribut di kelas luar dalam metode statis "paket"-level. * Prinsip yang sama sama untuk kelas jaket untuk mengakses metode dan properti pribadi di kelas dalam. Ketika kelas dalam dikompilasi, * akan menghasilkan metode statis tingkat "paket" yang sesuai dengan metode dan properti pribadi yang perlu diakses oleh kelas jaket. * * Hasil Refleksi Intera: * Int Private Int IA * Di bawah ini adalah referensi dari objek kelas mantel yang dipegang oleh kelas internal * InterOBJ akhir ini $ 0 * Gunakan objek kelas mantel sebagai parameter dalam konstruktor * InterOBJ $ InterA (InterOBJ) * Private Void PA () * Paket Pompiler secara otomatis menghasilkan metode statis untuk mengakses private ATRIBUT (). pa1 () * */class intera {private int ia = 9; private void pa () {System.out.println ("This is Intera.pa: ia ="+ia+", interobj.i ="+geti ());} public void pa1 () {System.out.println ("ini adalah intera. ia = "+ia+", InteroBj.i = "+geti ());}}/ * * Kelas internal lokal hanya terlihat di dalam metode, dan fitur lainnya sama dengan kelas internal umum. * Untuk variabel lokal yang perlu diakses, harus diatur ke final, karena meskipun kelas dalam lokal dapat menyimpan * referensi ke objek kelas luar untuk mengakses properti dan metode, ia tidak dapat mengakses variabel lokal dalam metode kelas eksternal. Semua kompiler "menyalin" salinan variabel lokal yang perlu diakses di kelas dalam lokal (tetapi tidak ada salinan untuk tipe yang tipe dasarnya int, float dan string * tidak diubah). Untuk memastikan bahwa nilai variabel yang disalin dan * objek yang ditunjuk oleh nilai variabel dalam metode eksternal adalah objek yang sama, diperlukan bahwa variabel lokal yang digunakan oleh kelas lokal harus diatur ke final dan tidak dapat dimodifikasi *, sehingga untuk memastikan bahwa variabel yang disalin di bagian lokal dan variabel dalam titik metode eksternal ke objek yang sama. Menetapkan variabel * ke final hanya mengontrol yang ditunjukkan alamat objek oleh variabel tetap tidak berubah, daripada bahwa sifat internal objek yang ditunjukkannya tidak dapat diubah. * * Hasil Refleksi Interb: * * Int pribadi pribadi * di bawah ini adalah referensi dari objek kelas mantel yang dipegang oleh kelas dalam * InterOBJ akhir ini $ 0 * di bawah ini adalah salinan referensi dari objek uji variabel lokal dalam metode eksternal yang dimiliki oleh Paramet Kelas * Private) di Bawah PRIVATE (PROVER PRIVATE), Interob, dan Interby, Paramets, Paramets * Private PRIVATE (PROVER PROVER) di bawah) Interb (Interb, dan Interb di BE dengan konstruktor * Interob di Bawah Parsor * Interob di Di Bawah PRIVATE * INTERB DI BIND INTERB (INTERB DI BIND INTERB (INTERB INTERB dan TES Variabel Lokal sebagai Parameters dalam konstruktor * PRIVATE PENDERB (PRivate is the compiler automatically generates a static method for accessing private properties or method package level* static void access$0(InterObj$1$InterB) */public void pi(){final int s=5;final Test test=new Test();class InterB{private int ib=7;private void pB(){System.out.println("this is InterB.pB: ib="+ib+ ", (Metode) pi.s ="+s+", test.t ="+test.gett ());}} interB IB = interB baru (); // Ini diubah keadaan internal uji uji yang dirujuk oleh kelas internal lokal. // Ketika hasilnya disebut ib.pb (), outputnya adalah nilai yang diubah 100test.sett (100); ib.pb ();}/ * * kelas dalam statis, digunakan ketika tidak perlu memegang referensi ke "objek kelas mantel". * * Hasil Refleksi Inter: (kelas dalam statis tidak memiliki referensi ke objek kelas Coat) * inter private ic * inter () * private void pc () */kelas statis {private int ic = 6; private void pc () {System.out.println ("This is Interc.pc: ic ="+ic);}}. * Anda dapat mengakses izin apa pun di kelas dalam*/public void pp () {intera ia = intera baru (); ia. * Anda tidak dapat membangun kelas dalam non-statis karena tidak ada objek dalam metode statis yang mengacu pada "kelas mantel" untuk membangun * objek kelas dalam yang perlu dirujuk oleh objek kelas mantel. */public static void ppp () {// intera ia = new intera (); // tetapi dapat dibangun sebagai berikut: interObj iobj = interobj baru (); intera ia = iobj.new intera (); ia.pa (); ia. IB = InterB baru ();}/ * * Tes kelas internal anonim */public void pppp () {testInterface tif = testInterface baru () {public void pppp () {System.out.println ("TestInterface.noname");}; tif.pppp (); IB = 7, (Metode) pi.s = 5, test.t = 100 * Ini adalah intera.pa: ia = 9, interobj.i = 8 * Ini adalah intera.pa1: ia = 9, interobj.i = 8 * ini adalah inter. Ini adalah Interc.pc: ic = 6*testInterface.noname*/public static void main (string [] args) {interoBj io = new interobj (); io.p ();}}/** antarmuka {class for public {class for public {public variabel {public variabel {public variabel {public variabel {public void () int gett () {return t;} public void sett (int t1) {t = t1;}}Izinkan saya berbagi contoh lain:
Kelas Publik InnerClass {Static Toy Toy = new new mainan () {string name = "lao wu";@override public void jump () {System.out.println (Nama+"Breaking Out of the Earth"); go ();}};/*Kelas dalam: Kelas yang didefinisikan di dalam kelas*1. Kelas Internal Anggota: *1.1 Kelas internal anggota dapat secara langsung mengakses properti kelas eksternal *1.2 Akses objek saat ini dari kelas eksternal melalui nama kelas eksternal. Dengan cara ini * Kelas Internal Anggota Objek Instantiated: Nama Kelas Eksternal. Nama Referensi Nama Kelas Internal = Objek Kelas Eksternal. Nama kelas internal baru (); *2. Kelas Dalam Statis*2.1 Sumber Daya Anggota dari Kelas Eksternal tidak dapat diakses di dalam kelas dalam statis, dan hanya dapat mengakses sumber daya statis kelas eksternal melalui nama kelas*Objek Instantiasi Kelas Dalam Statis: Nama Kelas Eksternal. Nama Referensi Nama kelas internal = Nama kelas eksternal baru. Nama kelas internal (); *3. Kelas Dalam Lokal:*3.1 Anda juga dapat secara langsung mengakses properti kelas eksternal*3.2 Anda juga dapat mengakses objek saat ini dari kelas eksternal*3.3 Kelas dalam lokal hanya dapat diakses di dalam metode ini, dan pengubah hanya dapat menjadi default*4. Diperlukan kelas dalam anonim: Ketika instance subclass tertentu dari suatu kelas diperlukan, kelas untuk sementara dihasilkan menggunakan * nama kelas baru () { * Metode Overwrite; *}; *4.1 Kelas Dalam Anonim Mengakses Properti Metode Eksternal, dan Properti Ini Akan Dikonversi Menjadi Konstan*4.2 Atribut dan Metode Baru yang Ditambahkan Dalam Kelas Dalam Anonim, dan hanya dapat digunakan di dalam kelas dalam anonim*/public static Main (string [] args) {per orang = orang baru ("Lao Chen", 18) Komputer ("Alien"); orang. Pembatas pc1 = orang baru ("Jian Zihao", 18). Komputer baru ("Alien"); pc.rungame (); pc1.rungame (); person. "Rokudou"; komputer com = komputer baru () {@override public void rungame () {// TODO Metode yang dihasilkan secara otomatis stubsystem.out.println (per.age+"tahun yang berusia"+per.name+"Playing lalalala demasita"); System.out.println (str); kelas/*mainan mainan = mainan baru () {@Override public void jump () {System.out.println ("Breaking Out of the Earth"); }};*/toy.jump (); Toy.jump (); // Toy.go (); // System.out.println (Toy.);}} class Person {name string; int usia; static int era1 = 18; name string statis1 = "ahli penuh waktu"; orang publik (nama string, int era) {super); ini. playgame () {System.out.println (name+"play game");} komputer kelas publik {nama string; komputer publik (nama string) {super (); this.name = name;} public void rungame () {System.out.println (name+"run game"); System.out.println (usia+"tahun" name.te "+" name. " class static computer1 {string name; public computer1 (name string) {super (); this.name = name;} public void rungame () {System.out.println (name+"run game"); System.out.println (Person.age1+""+Person.name1+"Playing Game");}} public void public void void) {super (); this.name = name;} public void rungame () {System.out.println (name+"run game"); System.out.println (orang. rungame ();} kelas publik mainan {public void jump () {System.out.println ("Jump Toy");}}Meringkaskan
Di atas adalah semua penjelasan terperinci dari kode tes internal Java dalam artikel ini, saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!