将类定义在一个类里面或一个方法里面。
广泛意义上有四种内部类:
- 成员内部类。
可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员),当拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,默认访问内部类成员(就近),如果要访问外部类成员时需要 类名 . this . 。
- 局部内部类。
定义在一个方法或一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问权限仅限于方法内或者该作用域内。不能有权限修饰符。
- 匿名内部类。
继承一个类或者实现一个接口,不可兼得,没有class关键字,直接使用new生成一个对象的引用。
- 不能定义构造方法。
不能存在静态成员变量和静态方法。
不能是抽象的,必须实现继承类或实现接口的所有抽象方法。
只能访问final的局部变量。//在jdk1.8后,使用非final修饰的变量时会自动加上final。序列化时会单独建立一个字节码文件。
局部内部类的限制也在匿名内部类生效。
- 静态内部类。
static class name{
}
静态内部类不需要依赖外部类对象,且不能使用外部类的非static成员变量或方法。