一、概念:
内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)。
二、内部类的使用场景、作用:
当一个事物的内部,还有一个部分需要完整的结构进行描述,而这个内部的完整的结构又只为外部事件提供服务,那么整个内部的完整结构可以选择使用内部类来设计。
三、
内部类通常可以方便访问外部类的成员,包括私有的成员。
内部类提供了更好的封装性,内部类本身就可以用 private、 proteceed 等修饰,封装性可以做更多的控制。
(一)静态内部类:
(1)有static修饰,属于外部类本身
(2)它的特点和使用与普通类是完全一样的,类有的成分他都有,只是位置在别人里面而已
public class Outer{ //静态成员内部类
public static class Inner{
}
}
(3)静态内部类创建对象的格式
外部类名.内部类名 对象名 = new 外部类名.内部类制造器
Outer.Inner in = new Outer.Inner();
(4)特点
使用与普通类一样,类有的成分他都有,只是位置在别人里面而已。
可以直接访问外部类的静态成员,不能直接访问外部类的实例成员。
开发中实际用的还是比较小。
(二)成员内部类
(1)无static修饰,属于外部类对象
(2)外部类名.内部类名 对象名 = new 外部类构造器.new 内部类构造器()
Outer.Inner in = new Outer().new Inner();
(3)成员内部类可以直接访问外部类静态成员(外部类的静态成员只有一份可以被共享访问)
成员内部类的实例方法可以直接访问外部类的实例成员(因为必须先有外部类对象,才能有成员内部类对象,所以可以直接访问外部类对象的实例成员)
(4)注意:在成员内部类中访问所在的外部类对象:格式:外部类名.this
(三)局部内部类
局部内部类放在方法、代码块、构造器等执行体中
局部内部类的类文件名为:外部类$内部类.class
(四)匿名内部类
(1)本质上是一个没有名字的局部内部类,定义在方法中、代码块中等
(2)作用:匿名内部类是一个没有名字的内部类
匿名内部类写出来会产生一个匿名内部类的对象
匿名内部类的对象类型相当于是当前new的那个的类型的子类类型
Employee a = new Employee(){
public void work(){
}
};
a.work();
匿名内部类可作为方法的参数进行传输
开发中不是我们主动去定义匿名内部类的,而是别人需要我们写或者我们可以写的时候才会使用。
匿名内部类的代码可以实现代码进一步简化