Java内部类的分类和用法
- 一、静态内部类
- 二、成员内部类
- 三、局部内部类
- 四、匿名内部类
内部类主要有四种:1.静态内部类 2.成员内部类 3.局部内部类 4.匿名内部类
一、静态内部类
定义:被声明为static的内部类。
特点:
- 可以不依赖于外部类实例而被实例化(通常的内部类需要再外部类实例化后才能实例化)
- 不能与外部类名字相同
- 不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态方法(即使是私有类型也可以访问)
class outerClass{
static class innerClass{} //静态内部类
}
二、成员内部类
定义:就是一般的内部类(静态内部类去掉static就变成了成员内部类)
特点:
- 只有外部类实例化后,该内部类才能被实例化
- 不能有静态成员
- 可自由引用外部类的属性和方法(包括静态和非静态)
class outerClass{
class innerClass{} //成员内部类
}
三、局部内部类
定义:一个代码块内的类,作用范围就是该代码块(最少用到的内部类)
特点:类似局部变量,不能被public,protected,private,static修饰,只能访问方法中定义为final类型的局部变量
class outerClass{
public void memberFun(){
class innerClass{} //局部内部类---定义在一个代码块中
}
}
四、匿名内部类
定义:没有类名的内部类
特点:
- 不使用关键字:class、extends、implements
- 没有构造方法
- 必须继承其他类/实现其他接口
- 代码简洁紧凑,但是可读性差
public class MyFrame extends Frame{ //外部类
public MyFrame(){
addWindowListener(new WindowAdapter(){ //匿名内部类
public void windowClosing(WindowEvent e)
dispose();
System.exit(0);
}
});
}
}