Java内部类

内部类

1.1内部类简介

  • 当一个类是在另外一个类的内部定义,则这个类叫做内部类(可以定义在任何位置,甚至在方法体中(在方法体中定义的是局部内部类))。
  • 内部类只能被该外部类访问,不能被该外部类所在包的其它类访问。
  • 内部类成员可以直接访问外部类的私有数据,因为内部类被当作外部类成员。同一个类的成员之间可以互相访问,但是外部类不能访问内部类的实现细节,例如内部类的成员变量。
  • 内部类比外部类可以多三个修饰符:private、protect、staticJava内部类_第1张图片
    • 非静态内部类不可以拥有静态成员。在这里插入图片描述
    • 内部类调用成员的顺序:该方法===> 内部类 ===〉外部类;如果外部类和内部类的成员变量重名了,可以通过外部类名.thisthis来调用。

1.2 非静态内部类和静态内部类和局部内部类

  • 非静态内部类是不由static修饰的,属于对象。
    1. 在外部类中使用内部类,与平常使用普通类没有太大区别。一样可以直接通过内部类类名来定义变量,通过new调用内部类的构造器来创建实例。
    2. 在外部类以外的地方使用内部类,必须通过外部类对象来实现(非静态内部类必须寄存在外部类对象中)Java内部类_第2张图片
  • 静态内部类由static修饰,该内部类属于外部类的类成员
    1. 外部类中使用静态内部类,创建外部类时不需要对象,直接通过外部类类名来实现。Java内部类_第3张图片
    2. Java内部类_第4张图片
  • 局部内部类是定义在外部类的方法体当中。
    1. 局部内部类因为定义在方法当中,所以不能在外部类的方法以外的地方使用,因此局部内部类也不能使用访问控制符和static修饰符。Java内部类_第5张图片

1.3 匿名内部类

  • 定义:匿名内部类适合创建那种只需要使用一次的类,创建匿名内部类的时会立即创建这个类的的实例,这个类的定义又会立即消失,匿名内部类不能重复使用。
  • 定义格式:
   new 实现接口()
   {
   //匿名内部类的类体
   }

Java内部类_第6张图片

  • Java8之前的局部内部类和匿名内部类访问的局部变量必须使用final修饰符修饰,但是Java8之后,如果局部变量被匿名内部类访问,该局部变量相当于自动使用了final修饰。所以匿名内部类中不能给已经赋值了的局部变量赋值了。

你可能感兴趣的:(Java基础)