内部类
概念:Java 语言允许将一个类定义在另一个类的内部,这种语法叫做内部类
内部类的作用
- 更好的封装性
- 内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,但外部类不能访问内部类的实现细节,例如内部类的成员变量
- 匿名内部类适用于创建那些仅需要一次使用的类
成员内部类
(1) 每一个成员内部类的对象都对应一个外部类对象,一个外部类对象可以有多个内部类对象
(2) 在成员内部类里可以访问外部类的私有属性和方法,可以通过 父类名称.this.父类属性名 来访问
例如如下代码:
public class Text {
private int intOuter = 100;
public void useInnert() {
//每个成员内部类对象都对应一个外部类对象
InnerB innerb = this.new InnerB();
}
//成员内部类
public class InnerB{
public InnerB() {
System.out.println("InnerB....");
}
public void accessOuter() {
//可以访问外部类的属性和方法
System.out.println(Text.this.intOuter);
}
}
}
静态内部类
(1) 静态内部类:作为外部类的类成员存在
**(2) ** 修饰符和成员内部类一样
(3) 静态内部类里不能访问外部类的非静态成员,只能访问静态成员
(4) 声明:外部类名.内部类名
(5) 实例化:new 外部类名.内部类构造函数
(6) 静态内部类里可以定义静态成员
例如如下代码:
public class Text {
public static String staticStr = ""; //静态成员
public String str = ""; //非静态成员
public void Text02(){
//外部类方法中实例化静态内部类
InnerA innerA = new Text.InnerA();
}
//静态内部类
public static class InnerA{
//静态内部类可以定义静态成员
public static String staticStr = "";
public InnerA() {
System.out.println("InnerA()=== ");
}
public void accessOutClass() {
//可以访问外部类的静态变量成员
System.out.println(Text.staticStr);
//System.out.println(str);//访问外部类的非静态成员会出错
}
}
}
匿名内部类
(1) 没有类名,没有构造方法
(2) 匿名内部类是编程中使用得最多的一种内部类
例如如下代码:
public class Text {
public void textAnonymous() {
//匿名内部类类体开始
new Thread() {
public void run() {
}
};
//类体结束 注意“;”表示结束
}
}