一、概念
在一个类中定义了一个完整的类。
特点:1、编译之后会生成一个.class文件。
2、内部类可以使用外部类的私有属性从而不破坏外部类的封装
二、组成
成员内部类 静态内部类 局部内部类 匿名内部类
三、成员内部类
a)定义位置:类中,方法的外面。类似于一个成员变量 。
b)成员内部类对象的创建:基于外部类的对象进行创建。
语法:外部类.内部类类名 对象名 = 外部类对象名.new 内部类类名();
c)特点
i.成员内部类可以直接访问外部类的私有属性不破坏外部类的封装。
ii.外部类的成员变量可以和内部类的成员变量重名,但是遵循的是就近原则,以内部类的成员变量优先。
思考:如何访问外部类的同名成员变量?
this.属性名代表访问内部类的属性名;
外部类的类名.this.属性名;
iii.外部类中可以定义静态成员,成员内部类不能定义静态成员。
四、静态内部类
a)定义位置:类中,方法的外面,被static修饰。类似于静态属性。
b)创建对象:不需要依赖外部类对象,可以直接通过类名进行创建。
语法: 外部类类名.内部类类名 对象名 = new 外部类.内部类类名();
c)访问方式
访问静态内部类的普通成员通过对象名.进行访问
访问内部类的静态成员可以通过外部类类名.内部类类名.静态属性。
外部类类名.内部类类名.静态方法()。
d)特点:静态内部类可以直接访问外部类的静态成员,不能直接访问外部类的普通成员。
五、局部内部类
a)定义位置:在方法中,类似于局部变量。
b)创建对象:必须在定义的方法内创建对象。
c)特点
i.在局部内部类中可以访问外部类的私有属性。
ii.在局部内部类中可以访问本方法的局部变量,但是要求必须加上final。
六、匿名内部类
a)是一个特殊的局部内部类(局部内部类具有的特点 匿名内部类都具备)
b)要求:继承一个类或者实现一个的接口。
c)创建对象:只能创建一个类的对象
d)特点
i.可读性差
ii.代码更加简洁