内部类

1. 什么是内部类?
写在一个类里面的类就叫做内部类

2. 什么时候用到内部类?
一个类表示的事物是另一个类的一部分,且单独存在没有意义
比如:汽车的发动机,人的心脏等等

3. 成员内部类

  • 写在成员位置的,属于外部类的成员
  • 成员内部类可以被一些修饰符所修饰
  • JDK16之前不能在内部类中定义静态变量,JDK16开始才可以定义静态变量
  • 获取成员内部类对象的两种方式:

方式一:在外部类编写方法,对外提供内部类对象(通常是内部类被修饰为private时才用)
如:

private class Inner(){}
public Inner getInner(){
return new Inner();
}

方式二:直接创建
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
范例:Outer.Inner oi = new Outer().new Inner()

外部类成员变量和内部类成员变量重名时,在内部类如何访问?
System.out.println(Outer.this.变量名)

4. 静态内部类

什么是静态内部类?
静态内部类是一种特殊的成员内部类

直接创建静态内部类对象的方式?
Outer.Inner oi = new Outer.Inner();

如何调用静态内部类中的方法?

  • 非静态方法:先创建对象,用对象调用
  • 静态方法:外部类名.内部类名.方法名();

5. 局部内部类

  1. 将内部类定义在方法里面就叫做局部内部类,类似于方法里的局部变量
  2. 外界是无法直接使用,需要在方法内部创建对象并使用
  3. 该类可以直接访问外部类的成员,也可以访问方法内的局部变量

6. 匿名内部类

什么是匿名内部类?
隐藏了名字的内部类,可以写在成员位置,也可以写在局部位置

匿名内部类的格式?
new 类名或接口名(){
重写方法;
};

匿名内部类等价于
没有名字的Java类 + 实现接口/继承 + 重写方法 + 创建对象

使用场景?

  • 如果实现类(实现了接口的类)只要使用一次,就可以用匿名内部类简化代码,不用单独创建一个实现类的文件
  • Lambda表达式的前置知识点
posted @ 2026-04-28 10:47  AlexXuu  阅读(4)  评论(0)    收藏  举报