定义
将一个类的定义放在另一个类的内部,这就是内部类。
为什么使用内部类
一般来说,内部类继承自某个类或实现某个接口,内部类的代码操作创建它的外围类的对象。
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类没有影响。
使用内部类可以继承对某个具体的或抽象的类的能力,使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
内部类允许继承多个非接口类型(类或抽象类)。如果拥有的是抽象的类或具体的类,而不是接口,那就只能使用内部类才能实现多重继承。
语义
在外围类的方法里使用内部类,与使用其他的类没什么不同。
外围类的方法返回一个指向内部类的引用。如果想要在外部类的静态方法之中的任意位置创建某个内部类的对象,必须指明对象的类型:
OuterClassName.InnerClassName
内部类与向上转型
内部类可以转型为其基类和接口。内部类–某个接口的实现–对于其他人来说是完全不可见且不可用的。
内部类可以被声明为protect或private, 而普通类只可以赋予public和包访问权限。
局部内部类和匿名内部类
使用局部类而不使用匿名内部类的唯一理由是,需要不止一个该内部类的对象。
为什么使用?
- 实现某类型的接口,创建并返回对其的引用
- 创建一个类来辅助你的解决方案,但是不希望这个类是公共可见的
局部内部类
在方法的作用域内创建一个完整的类,叫做局部内部类。
局部内部类是方法的一部分,而不是外围类的一部分。所以,在同一个目录下的任意类中对某个内部类使用与局部内部类相同的类标识符,不会有命名冲突。而在此方法之外是不能访问它的局部内部类的。
匿名内部类
1) 缺省参数
public