引言
本章要回答的核心问题是:为什么需要在一个类里面定义另一个类? 这违反了“高内聚、低耦合”的直觉吗?实际上,内部类是面向对象思想的一种深化,用于描述“整体-部分”关系。
逻辑链条:
C1. 内部类是什么?一个类里面再定义一个类 -> 理解基本语法形式。
C2. 何时使用内部类?当外部类包含一个完整且不必独立设计的事物时 -> 典型场景(汽车与发动机)。
C3. 内部类有哪些形式?成员内部类 / 静态内部类 / 局部内部类 / 匿名内部类 -> 为后续具体形式埋下伏笔。
一、内部类

1. 内部类概述
五大成分之一:内部类是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块)
定义场景:当一个类的内部包含一个完整事物,且该事物无需单独设计时(如汽车类中的发动机类)
三大优势:
面向对象:体现"整体-部分"关系(如汽车包含发动机)
访问便利:内部类可直接访问外部类成员
封装性:可通过private修饰实现更好的封装
代码示例:
// 外部类
public class OuterClass {
// 外部类的变量、方法等...
// 内部类
public class InnerClass {
// 内部类的变量、方法等...
}
}2. 内部类的四种形式

分类标准:按定义位置和修饰符不同分为四种
成员内部类(无static修饰)
静态内部类(有static修饰)
局部内部类(定义在方法内)
匿名内部类(重点掌握)
1)成员内部类
基本性质:类似普通成员变量/方法,属于外部类对象持有
寄生特性:必须依附外部类对象存在(先创建外部类对象才能创建内部类对象)
成员内部类的创建对象
创建语法:
必须两步创建:先创建外部类实例,再通过该实例创建内部类实例
完整成员:可包含普通/静态成员(JDK16+)、构造器、方法等
成员内部类访问外部类的成员特点
是否可以直接访问外部类的静态成员
访问规则:可直接访问(静态成员属于类级别,只有一份)
省略规则:同个类中访问静态成员可省略类名
是否可以直接访问外部类的实例成员
访问原理:通过隐式持有的外部类对象引用访问
3. 内部类的总结
创建要点:必须先创建外部类对象才能创建成员内部类对象
访问特点:
可自由访问外部类的静态成员和实例成员
通过外部类名.this访问外部类实例成员
实际应用:主要用于阅读源码,实际开发中较少自定义
3、内部类优势
更强的封装性: 隐藏仅对主类有意义的实现细节。
逻辑更清晰: 将紧密相关的类组织在一起。
访问便利: 内部类可直接访问外部类的私有成员。
4、内部类的四种形式概览
ava根据内部类定义的位置和方式,将其分为四种主要形式,它们分别适用于不同的场景。
默认评论
Halo系统提供的评论