有 4 种,静态内部类,成员内部类,局部内部类,匿名内部类。
内部类的修饰符比外部类多,外部类只能用 public 修饰,而内部类除了 public,还能用 private,protected,和 static 修饰。
静态内部类
static 修饰的就是静态内部类。这个内部类就属于外部类自身,而不是属于外部类的实例。
class outerClass {
static class innerClass{//静态内部类
static public void f1(){};
public void f2(){};
}
}
//访问静态内部类成员的方法
outerClass.innerClass.f1();
new outerClass.innerClass().f2();
成员内部类
成员内部类就是类的一个成员。它是与类的实例捆绑在一起的,所以不能定义静态属性和方法。只有在外部类实例化后,这个内部类才能实例化。
public class outerClass {
public class innerClasss1{}
}
//实例化内部类
outerClass.innerClasss1 c=new outerClass().new innerClasss1();
局部内部类
局部内部类是方法中定义的类,它不能在该方法之外使用,因此局部内部类不能使用任何访问控制符修饰,也不能用 static。
局部内部类的作用域很小,因此实际开发中很少使用。
public class outerClass {
void f(){
class innerClasss2{}//局部内部类
innerClasss2 c=new innerClasss2();
}
}
匿名内部类
匿名内部类适合创建只需要使用一次的类。创建匿名内部类,就是立即创建这个类的实例。匿名内部类不能重复使用。匿名内部类必须实现一个接口,或者继承一个类。
//抽象类
abstract class Animal{
public abstract void bark();
}
//继承抽象类Animal,实现一个匿名类并实例化了它。
Animal an=new Animal(){
public void bark(){
System.out.println("汪汪汪...");
}
};
an.bark();