当前位置: 首页 > news >正文

66. Java 嵌套类

文章目录

  • 66. Java 嵌套类
    • 1. 非静态嵌套类(内部类)
    • 2. 静态嵌套类(Static Nested Class)
    • 3. 使用嵌套类的优势
    • 4. 总结

66. Java 嵌套类

在 Java 中,嵌套类是指在另一个类内部定义的类,根据是否使用 static 修饰符,嵌套类可分为:

  1. 非静态嵌套类(内部类,Inner Class)
  2. 静态嵌套类(Static Nested Class)

定义方式如下:

class OuterClass {// 非静态嵌套类(内部类)class InnerClass {// 内部类内容}// 静态嵌套类static class StaticNestedClass {// 静态嵌套类内容}
}

1. 非静态嵌套类(内部类)

与外部类的关系:

  • 内部类与外部类实例相关联,可以直接访问外部类的所有成员,包括私有成员。

创建内部类实例:

OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();

访问修饰符:

  • 内部类可被声明为 privatepublicprotected 或包级私有(无修饰符),与其他类成员一致。

用途:

  • 当内部类仅对外部类有意义,或需要访问外部类实例的非静态成员时,使用内部类可实现更紧密的封装和逻辑关联。

示例:

public class OuterClass {private String outerField = "外部类字段";// 内部类class InnerClass {void display() {System.out.println("访问:" + outerField);}}public static void main(String[] args) {OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass();inner.display(); // 输出:访问:外部类字段}
}

在上述示例中,InnerClass 作为 OuterClass 的内部类,直接访问了外部类的私有字段 outerField

2. 静态嵌套类(Static Nested Class)

与外部类的关系:

  • 静态嵌套类与外部类本身关联,不依赖外部类实例;不能直接访问外部类的实例成员,若需访问,必须通过外部类对象引用。

创建静态嵌套类实例:

OuterClass.StaticNestedClass nestedObj = new OuterClass.StaticNestedClass();

访问修饰符:

  • 静态嵌套类可声明为 privatepublicprotected 或包级私有。

用途:

  • 当嵌套类不需访问外部类实例成员,但在概念或逻辑上与外部类紧密相关时,使用静态嵌套类可简化包结构,保持封装性。

示例:

public class OuterClass {private static String staticOuterField = "外部类静态字段";// 静态嵌套类static class StaticNestedClass {void display() {System.out.println("访问:" + staticOuterField);}}public static void main(String[] args) {OuterClass.StaticNestedClass nestedObj = new OuterClass.StaticNestedClass();nestedObj.display(); // 输出:访问:外部类静态字段}
}

在此示例中,StaticNestedClass 作为静态嵌套类,访问了外部类的静态字段 staticOuterField

3. 使用嵌套类的优势

  1. 逻辑分组: 将仅在外部类内部使用且与外部类高度相关的类嵌套在外部类中,使代码结构更紧凑、清晰,减少包中不必要的顶级类。
  2. 增强封装性:
    • 如果一个辅助类需要访问另一个类的私有成员,将其作为内部类可获得访问权限,同时对外保持隐藏,减少外部依赖。
    • 静态嵌套类也可隐藏在外部类中,起到“包装内部实现”的作用,使外部只需关注外部类,而无需了解辅助类。
  3. 便于维护: 代码更接近使用它的地方,对于小型类或仅有辅助功能的类,直接在外部类内部声明可使阅读和维护更加容易。

4. 总结

  • 内部类(非静态嵌套类): 依赖外部类实例,可以访问外部类的所有成员。对象创建需要外部类对象。
  • 静态嵌套类: 不依赖外部类实例,不能直接访问外部类的实例成员。
  • 嵌套类可使用访问修饰符(privatepublicprotected、包级私有)来控制可见性。
  • 使用嵌套类能够逻辑分组仅在外部类内部使用的类、增强封装性以及改善代码可读性。

这使得嵌套类在组织紧密相关的类或隐藏实现细节时非常有用。

http://www.xdnf.cn/news/270037.html

相关文章:

  • 二叉树最近公共祖先(后序遍历,回溯算法)
  • 强化学习--4.策略梯度方法(蒙特卡罗)
  • 数字信号处理学习笔记--Chapter 0 数字信号处理概述
  • Python 部分内置函数及其用法详解
  • HTML打印设置成白色,但是打印出来的是灰色的解决方案
  • mcp+llm+rag
  • 隐藏元素的多种方式
  • TFT(薄膜晶体管)和LCD(液晶显示器)区别
  • zabbix 重置登录密码
  • 【文献阅读】全球干旱地区植被突变的普遍性和驱动因素
  • 陶瓷陶器缺陷检测VOC+YOLO格式938张2类别
  • 时间交织(TIADC)的失配误差校正处理(以4片1GSPS采样率的12bitADC交织为例讲解)
  • 64常用控件_多元素控件介绍
  • Linux中进程的属性:进程优先级
  • MySQL 分库分表
  • C++ 中 virtual 的作用
  • 基于 vue-flow 实现可视化流程图
  • 第7章 【Python数据类型大爆炸】Python 基础语法和数据类型特性的实例
  • “c++11“,右值,右值引用,可变参数模板...
  • GPU集群监控系统开发实录:基于Prometheus+Grafana的算力利用率可视化方案
  • 第15章 对API的身份验证和授权
  • 论系统安全架构设计及其应用
  • 【KWDB 创作者计划】使用Docker实现KWDB数据库的快速部署与配置
  • vLLM 本地部署Qwen大模型
  • ES6语法
  • 【大模型面试每日一题】Day 7:为什么大模型训练选择 Adam 而非 SGD?Adam 的关键改进是什么?
  • 被低估的AI+数据标注
  • DeepSeek辅助学术写作之修订与校稿以及发表与推广相关提示词分享祝你顺利毕业~
  • 介绍最前沿的人工智能创新,‘无反向传播’神经网络训练方法?
  • 53、【OS】【Nuttx】编码规范解读(一)