内部类可以分为:成员内部类、局部内部类、匿名类。
内部类对象依赖于外部类对象,除非已经存在一个外部类对象,否则不会出现内部类对象。
在实例化内部类对象时,必须在new操作符之前提供一个外部类对象的引用。
public static void main(String args[]){
OuterClass out = new OuterClass();
OuterClass.InnerClass in = out.new InnerClass();
}
内部类向上转型为接口:如果将一个权限修饰符为private的内部类向上转型为其父类对象,或者直接向上转型为一个接口,在程序中就可以完全隐藏内部类的具体实现过程。可以在外部提供一个接口,在接口中声明一个方法。如果在实现该接口的内部类中实现该接口的方法,就可以定义多个内部类以不同的方式实现接口中的同一个方法,而在一般的类中时不能够多次实现接口中同一个方法的,这种方法常被用于在一个类中做出多个不同的响应事件。
非内部类不能被声明为private或protected
使用this关键字获取外部类的引用:
public class OutClass{
private int x;
private class InnerClass{
private int x = 9;
public void doit(int x){
x++; //调用的是形参x
this.x++; //调用内部类的变量x
OutClass.this.x++; //调用外部类的变量x
}
}
}
即使用外部类名称后跟一个点操作符和this关键字便可以获取外部类的一个引用。