一、内部类的定义
在某个类中定义的一个类,就被成为 内部类 。可以将内部类分为四类:成员内部类(非静态内部类)、静态内部类、局部内部类(方法内部类)、匿名内部类。
二、内部类的优势
- 内部类同样拥有像 继承类、实现接口 这样的类的特征,因此可以用来解决单继承带来的问题
- 内部类提供了更好的封装
- 内部类可以有多个实例,且与外部对象的信息相互独立
- 内部类对象的创建不依赖于外部类的创建
三、内部类的使用
1、成员内部类
public class Outer {
...
public class Inner {
...
}
...
}
可以被任何的访问修饰符修饰
内部不能有静态信息
其他类如何访问内部类:
Outer outer = new Outer(); Outer.Inner inner = outer.new Inner();
2、静态内部类
public class Outer {
...
public static class Inner {
...
}
...
}
- 内部可以包含任何信息
- 静态内部类的方法只能访问外部静态的信息
- 其他类访问静态内部类的静态方法和属性:
Outer.Inner.?
- 其他类访问静态内部类的成员方法:
Outer.Inner oi = new Outer.Inner(); oi.?;
3、局部内部类
public void outerMethod(int value) {
...
class Inner {
...
}
...
}
- 不能有访问修饰符
- 只能在方法内使用
- 不能创建静态的变量或方法
- 可以访问外部类的任何信息
- 可以直接访问方法内 被final修饰或已被赋值且从未被改变的 变量
4、匿名内部类
// 定义一个接口
public interface IInner{
void inner();
}
public class Outer {
public static IInner iInner(String speak){
return new IInner(){
@Override
public void inner(){
...
}};
}
...
}
- 没有访问修饰符
- 匿名内部类没有构造方法