1、内部类基础

内部类就是在一个类的内部定义一个类

比如在A中定义了一个B类,那么B类性对于A类来说就称为内部类。而A类相对于B类来说就是外部类了。

内部类有两个独立的目的,但都和封装有关。

  • 如果某个类型需要特别深入地访问另一个类型的内部实现,可以嵌套定义这个类型。作为成员类型的嵌套类型,其访问方式与访问成员变量和方法的方式一样,而且能打破封装的规则。
  • 某个类型可能只在特定的情况下需要使用,而且只在非常小的代码区域使用。这个类型应该密封在一个小范围内,因为它其实是实现细节的一部分,应该封装在一个系统的其他部分无法接触到的地方

内部类一般包括四种:
静态内部类成员内部类局部内部类匿名内部类

1.1 静态内部类

静态内部类特点

  • 静态内部类定义在另一个类里面的类,类的前面多了一个关键字static
  • 静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法。
  • 静态内部类中即能声明静态成员也可以声明非静态成员。

image.png

1.2 成员内部类

成员内部类特点

  • 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
  • 同名属性名方法名时访问外部类 外部类.this.成员名
  • 成员内部类是依附外部类而存在的,。然后通过 外部类对象.new 内部类 来创建内部类的对象
  • 成员内部类可以使用四种权限修饰符进行修饰。
  • 成员内部类中不能书写静态变量和方法

image.png

1.3 局部内部类

局部内部类的特点

  • 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
  • 局部内部类不可使用权限修饰符 静态修饰符进行修饰 同局部变量相同
  • 局部内部类可以直接访问方法中的属性
  • 局部内部类 可以直接访问方法外部类中属性和方法
  • 局部内部类 创建对象 要在方法内部 局部内部类的外部声明

image (3).png

1.4 匿名内部类

匿名内部类特点
匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。
一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

image.png