- 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();
}
}