Malah, seperti namanya, kelas dalaman ialah kelas dalam kelas, dan terdapat kelas dalam kelas .
Kelas dalaman terbahagi kepada empat jenis:
1 kelas dalaman biasa
2. Kelas dalaman statik
3. Kaedah Kelas dalaman
4. Kelas dalaman tanpa nama
Mari kita pelajari satu persatu~~
A Mari kita ketahui dahulu melalui kod:
package InternalClass; /** * 内部类 */ public class Car { public int a = 10; public int b = 20; //外部类的方法 public void method() { System.out.println("我是外部类Car的普通方法!"); bus b = new bus(); //创建内部类的对象 b.internalMethod(); } //内部类(在Car类中的bus类) public class bus { int b = 30; //内部类方法 public void internalMethod() { System.out.println("**这是bus内部类的普通方法!"); System.out.println("**我是内部类,现在在访问外部类Car的a:" + a); System.out.println("**我是内部类,现在在访问内部类bus的b:" + this.b); System.out.println("**我是内部类,现在在访问外部类bus的b:" + Car.this.b); //注意,如果在内部类需要使用外部类的属性,必须通过外部的类去this外部类的属性 } } //程序运行入口: public static void main(String[] args) { Car car = new Car(); //创建外部类的对象 car.method(); // 运行上面的代码 会输出 : 我是外部类Car的普通方法! //运行内部类的方法 //在上面method方法中已经创建了内部类bus的对象b //这里就是通过使用外部类Car的对象car去new一个内部类对象 bus b = car.new bus(); //通过内部类对象b 去使用方法即可 b.internalMethod(); //输出: /* **这是bus内部类的普通方法! **我是内部类,现在在访问外部类Car的a:10 **我是内部类,现在在访问内部类bus的b:30 **我是内部类,现在在访问外部类bus的b:20 */ } }
Kelas dalaman statik Seperti namanya, kelas dalam diubah suai dengan. statik untuk menjadikannya statik. Anda boleh memanggilnya secara terus menggunakan nama kelas luaran tanpa mencipta objek:
package InternalClass; public class Person { String name = "小王"; static int age = 20; //创建静态内部类 public static class Student{ String name = "小红"; //静态内部类的方法 public static void study(){ Person p = new Person(); //创建外部类的对象 //静态访问非静态需要使用对象去调用 System.out.println("内部类静态方法访问外部非静态成员:"+p.name); System.out.println("内部类静态方法访问外部静态成员:"+Person.age); System.out.println("内部类静态方法访问内部非静态成员:"+new Student().name); } } //程序运行入口 public static void main(String[] args) { //静态内使用方法不需要创建对象 Student.study(); } /* 输出: 内部类静态方法访问外部非静态成员:小王 内部类静态方法访问外部静态成员:20 内部类静态方法访问内部非静态成员:小红 */ }
Kaedah kelas dalaman, seperti namanya, juga merupakan kaedah dalam kelas luaran Cipta kelas baharu dalam badan:
package InternalClass; /** * 方法内部类 */ public class Student { //方法 public void study(){ int age = 20; String name = "小王"; //在方法内写类:方法内部类 class child{ //方法内部类的方法 public void play(){ System.out.println("孩子喜欢玩!"); } } //在外部类study的方法内创建一个生成内部类child的对象,并使用方法 child c = new child(); c.play(); } //程序执行入口 public static void main(String[] args) { Student stu = new Student(); //这里调用study方法后,在study方法体内创建了child的对象和调用了play的方法 stu.study(); } } //输出:我叫:小王我今年:20我爱学习 // 孩子喜欢玩!
1 Tidak boleh ada pengubah akses sebelum kelas
2 hanya boleh digunakan dalam kaedah ini
3 >
4. Pembolehubah setempat dan parameter dalam kaedah boleh diakses secara langsung, tetapi tidak boleh diubah suai5 Anda boleh mengakses sebarang maklumat kelas luaranD . Kelas dalam tanpa nama:
Kelas dalam tanpa nama ialah kelas dalam tanpa nama:
Tentukan dahulu antara muka:public interface USB { void read(); }
package InternalClass; /** * 匿名内部类 */ public class Child { public static void main(String[] args) { USB u = new USB() { @Override public void read() { System.out.println("这是匿名内部类,是USB接口没有具名的子类,必须重写 接口做具体实现"); } }; u.read(); } }
Empat perkara yang perlu diperhatikan tentang kelas dalaman tanpa nama:
1 kelas dalaman tanpa nama tidak boleh menentukan mana-mana ahli statik
2 Kaedah dalam kelas dalaman tanpa nama tidak boleh abstrak 3. Kelas dalaman tanpa nama mesti melaksanakan semua kaedah abstrak antara muka atau kelas induk abstrak 4 Anonymous Pembolehubah ahli kelas luar atau kaedah ahli yang diakses oleh kelas dalaman mesti diubah suai dengan statik Ringkasan kelas dalaman. : 1. Mengapa menggunakan kelas dalaman? Kelas dalaman mempunyai ciri asas kelas: mereka boleh mewarisi kelas induk dan melaksanakan antara muka Dalam masalah sebenar, kita akan menghadapi beberapa masalah yang tidak dapat diselesaikan oleh antara muka Dalam kes ini, kita boleh menggunakan kelas dalaman untuk mewarisi kelas khusus atau Abstrak secara tidak langsung menyelesaikan satu siri masalah yang disebabkan oleh ketidakupayaan beberapa kelas warisan. 2. Faedah kelas dalaman: Kelas dalaman boleh menggunakan berbilang kejadian Setiap kejadian mempunyai maklumat statusnya sendiri dan tidak bergantung pada maklumat objek persisian yang lain Perhubungan "is-a", ia adalah entiti bebas Kelas dalam menyediakan enkapsulasi yang lebih baik Kecuali untuk kelas luar, kelas lain tidak boleh mengaksesnya Saat objek kelas dalam dibuat tidak bergantung pada objek kelas luar. BuatAtas ialah kandungan terperinci Analisis contoh kelas dalaman Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!