# 1、内部类
## 1、成员内部类
class Outer
{
//在外部类内部创建内部类对象 Inner inner = new Inner();
class Inner
{
}
}//在外部类外部创建内部类对象 外部类.内部类 inner = new Outter().new Inner();
①:成员内部类的创建需要依赖于外部类对象(成员方法必须通过对象调用),在没有外部类实例之前无法创建成员内部类对象
②内部类与外部类相对独立
③私有属性的互相访问,内部类可以直接访问外部类,而外部类访问内部类需要内部类的对象来访问
④成员内部类:类比成员方法,不能拥有静态域但是可以访问外部类的静态域
## 2、静态内部类
定义在外部类的内部,使用static修饰,类比静态方法,静态内部类不需要外部类对象产生就能使用,不能访问外部类的成员域,但是能访问静态域
1、静态内部类的创建语法
①:外部类内部:与成员内部类一样 Inner inner = new Inner();
②:外部类外部: StaticInnerClass.Inner inner = new StaticInnerClass.Inner();
## 3、方法内部类
1、定义在方法内部:类比局部变量
①:对外部完全隐藏,因此方法内部类不能有能和访问修饰符
②:方法内部类没有访问形参,这个形参是可以在方法中随意修改的,一旦方法内部类中使用了形参,这个形参必须声明为final
# 2、匿名内部类
1、匿名内部类只能使用一次,使用前提:必须继承一个父类或者实现一个接口,但最多只能继承一个父类或者实现一个接口
2、匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建内部类对象。因此不允许将匿名内部类定义成抽象类
3、匿名内部类不能定义构造器(构造方法),因为匿名内部类没有类名,所以不发定义构造器,但匿名内部类可以定义实例初始化块
4、匿名内部类可以让抽象类能够new,还可以还在接口上