Java成员内部类

点 赞
0
热 度
2
评 论
0
  1. 首页
  2. Java开发合集
  3. Java基础语言进阶
  4. Java成员内部类

引言

本章要回答的核心问题是:为什么需要在一个类里面定义另一个类? 这违反了“高内聚、低耦合”的直觉吗?实际上,内部类是面向对象思想的一种深化,用于描述“整体-部分”关系。

逻辑链条:

  • C1. 内部类是什么?一个类里面再定义一个类 -> 理解基本语法形式。

  • C2. 何时使用内部类?当外部类包含一个完整且不必独立设计的事物时 -> 典型场景(汽车与发动机)。

  • C3. 内部类有哪些形式?成员内部类 / 静态内部类 / 局部内部类 / 匿名内部类 -> 为后续具体形式埋下伏笔。

一、内部类

1. 内部类概述

  • 五大成分之一:内部类是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块)

  • 定义场景:当一个类的内部包含一个完整事物,且该事物无需单独设计时(如汽车类中的发动机类)

  • 三大优势:

    • 面向对象:体现"整体-部分"关系(如汽车包含发动机)

    • 访问便利:内部类可直接访问外部类成员

    • 封装性:可通过private修饰实现更好的封装

代码示例:

// 外部类
public class OuterClass {
    // 外部类的变量、方法等...

    // 内部类
    public class InnerClass {
        // 内部类的变量、方法等...
    }
}

2. 内部类的四种形式

  • 分类标准:按定义位置和修饰符不同分为四种

    • 成员内部类(无static修饰)

    • 静态内部类(有static修饰)

    • 局部内部类(定义在方法内)

    • 匿名内部类(重点掌握)

1)成员内部类

  • 基本性质:类似普通成员变量/方法,属于外部类对象持有

  • 寄生特性:必须依附外部类对象存在(先创建外部类对象才能创建内部类对象)

成员内部类的创建对象

  • 创建语法:

  • 必须两步创建:先创建外部类实例,再通过该实例创建内部类实例

  • 完整成员:可包含普通/静态成员(JDK16+)、构造器、方法等

成员内部类访问外部类的成员特点

是否可以直接访问外部类的静态成员

  • 访问规则:可直接访问(静态成员属于类级别,只有一份)

  • 省略规则:同个类中访问静态成员可省略类名

是否可以直接访问外部类的实例成员

  • 访问原理:通过隐式持有的外部类对象引用访问

3. 内部类的总结

  • 创建要点:必须先创建外部类对象才能创建成员内部类对象

  • 访问特点:

    • 可自由访问外部类的静态成员和实例成员

    • 通过外部类名.this访问外部类实例成员

  • 实际应用:主要用于阅读源码,实际开发中较少自定义

3、内部类优势

  • 更强的封装性: 隐藏仅对主类有意义的实现细节。

  • 逻辑更清晰: 将紧密相关的类组织在一起。

  • 访问便利: 内部类可直接访问外部类的私有成员。

4、内部类的四种形式概览

ava根据内部类定义的位置和方式,将其分为四种主要形式,它们分别适用于不同的场景。

形式

关键特征

类比

成员内部类

没有static修饰,属于外部类的对象。必须先有外部类对象,才能创建内部类对象。

汽车的发动机。属于某辆具体的汽车。

静态内部类

static修饰,属于外部类的类本身。可独立于外部类对象存在。

汽车的设计图纸。不属于某辆具体的汽车,而是属于“汽车”这个概念。

局部内部类

定义在方法或代码块内部,作用域仅限于所在的方法或块。

汽车维修时使用的专用工具。只在维修这个“方法”内有用。

匿名内部类

没有名字的局部内部类,通常用于快速实现接口或抽象类,常见于事件监听。

一次性的临时司机。用完即走,不需要知道他叫什么名字。

二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

内部类定义

类中包含的完整事物,无需单独设计时使用(如汽车类包含发动机类)

与普通类的区别、适用场景判断

成员内部类

属于外部类对象持有,必须通过外部类对象创建(Outer.Inner in = new Outer().new Inner()

创建语法特殊性、寄生特性理解

访问权限

可直接访问外部类的静态成员和实例成员

实例成员访问原理(寄生关系)

外部类实例访问

通过OuterClass.this访问关联的外部类实例(如People.this.heartbeat

this关键字的层级引用

四种内部类类型

成员内部类、静态内部类、局部内部类、匿名内部类(重点)

类型区分及应用场景

封装性优势

内部类可设为private增强封装,仅限外部类使用

与独立类定义的对比

开发实践

实际开发中更常见于阅读源码而非主动编写(如汽车-发动机关系)

理论知识与实际应用的差距


余乃云水散人,栖于数字之墟。性耽幽静,常以青简为田,墨痕为穗。晨起推窗,听松风煮茶;夜阑掩卷,伴竹影扫阶。此间筑小筑三椽,藏闲话若干:或遇史海遗珠,则录以素札;偶得诗瓢碎玉,便缀作清吟。往来皆烟霞客,谈笑有鸿儒踪。诸君若得暇,不妨暂驻云履,共品一盏烟岚,半卷春秋。

具有版权性

请您在转载、复制时注明本文 作者、链接及内容来源信息。 若涉及转载第三方内容,还需一同注明。

具有时效性

文章目录

欢迎来到南鸢宸羲的站点,为您导航全站动态

181 文章数
39 分类数
1 评论数
48标签数
最近评论
西北技术支持中心

西北技术支持中心


开始建站了😀