走進Java(十三):內部類
阿新 • • 發佈:2018-12-21
- Java中,類中除了可以定義成員變數與成員方法外,還可以定義類,稱為內部類,外面類稱為外部類
- 內部類的特點:
- 內部類與外部類經過JVM編譯後,生成的是兩個獨立的.class
- 內部類是外部類的一個成員,內部是可以訪問外部類的任何成員,但外部類不能直接訪問內部類成員
- 內部類可以為靜態的,外部類不能
成員內部類:
一個類作為外部類的成員
//外部類建立一個內部類物件
外部類名.內部類名 引用變數名=new 外部類名().new 內部類名();
package com.xdl.java.pkg07; //定義外部類 public class Other { // 定義類成員變數 private String name = "Other"; private int count; // 定義內部類 class Inner { // 定義內部類的變數 private String name = "Inner"; public void say() { // Other.this代表外部類物件 System.out.print(Other.this.name); System.out.println(":" + count); } } }
package com.xdl.java.pkg07;
public class TestOther {
public static void main(String[] args) {
// 建立內部類物件
Other.Inner obj = new Other().new Inner();
// 呼叫內部類方法
obj.say();
}
}
靜態內部類
package com.xdl.java.pkg07; public class Other2 { // 定義靜態類成員變數 private static String name = "Other"; private static int count; // 定義內部類 static class Inner { // 定義內部類的變數 public static String name = "Inner"; public static void say() { // Other.this代表外部類物件 System.out.print(Other2.name); System.out.println(":" + count); } } }
package com.xdl.java.pkg07;
public class TestOther2 {
public static void main(String[] args) {
// 直接呼叫內部類的屬性
String str = Other2.Inner.name;
System.out.println(str);
// 建立靜態內部類物件
Other2.Inner obj = new Other2.Inner();
obj.say();
}
}
方法內部類
在類中的方法中,定義類
package com.xdl.java.pkg07; public class Other3 { // 定義類靜態成員 private static String name = "Other"; private static int count; public void say() { // 定義方法內部類 class Inner { // 定義類成員 public String name = "Inner"; // 定義內部方法 public void say() { // 內部類成員方法中,訪問外部類私有成員變數 System.out.print(Other3.name); System.out.println(":" + count); } } // 建立區域性內部類 Inner obj = new Inner(); obj.say(); } }
匿名內部類
匿名內部類,就是沒有名稱的內部類
package com.xdl.java.pkg07;
public class Other4 {
public void say(){
System.out.println("Other4.say");
}
}
package com.xdl.java.pkg07;
public class TestOther4 {
public static void main(String[] args) {
// 建立匿名內部類
Other4 o = new Other4() {
public void say() {
System.out.println("匿名內部類");
}
};
o.say();
}
}