在Java中,可以把一个类定义到另一个类的内部,在类里面的这个类叫做内部类,在外面的类叫做外部类。内部类可以看做是外部类的一个成员(与类的属性和方法相似)。
内部类可以分为:
- 静态内部类
- 成员内部类
- 局部内部类
- 匿名内部类
1.静态内部类
class outerClass{
static class innerClass{} //静态内部类
}
(1)静态内部类不依赖于外部类的实例而被实例化,通常的内部类在外部类实例化后才能被实例化。
(2)静态内部类只能访问外部类的静态成员变量和方法。
2. 成员内部类
class outerClass{
class innerClass{} //成员内部类
}
(1)只有外部类实例化后,内部类才能被实例化。
(2)可以自由的引用外部类的变量和方法(无论是静态的还是非静态的)。
(3)不可以定义静态的属性和方法。
3.局部内部类
class outerClass{
public void function(){
class innerClass{}; //局部内部类
}
}
局部内部类是定义在一个代码块中的内部类,它的作用范围就是这个代码块。是内部类中最少使用到的一个内部类。
(1)局部内部类就像是局部变量一样,不能被public private protected static修饰。
(2)只能访问代码块中定义为final的局部变量。
4.匿名内部类
public class MyFrame extends Frame{
public MyFrame(){
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});
}
}
(1)匿名内部类是一种没有名字的内部类,不使用关键字class extends implements。。
(2)匿名内部类没有构造函数。
(3)一个匿名内部类必须是在new的后面,必须继承其他的类或者实现其他的接口。
(4)匿名内部类中不能定义静态的成员、方法和类。
(5)匿名内部类不能是 public protected private static的。
(6)匿名内部类是一个局部内部类,所以局部内部类的所有限制对其都生效。