java知识点---内部类与外部类

server/2024/11/15 6:18:50/

Java 中的内部类(Inner Class)是指定义在另一个类(称为外部类或宿主类)内部的类。内部类与外部类之间存在着特殊的关系和访问权限,这种设计允许更紧密的封装和更灵活的代码组织。下面详细介绍内部类的种类、特点、与外部类的关系,以及使用场景。

内部类的种类

根据定义的位置和访问权限,Java 中的内部类主要有以下几种类型:

  1. 成员内部类(Member Inner Class):

    • 定义在外部类的普通代码块中,可以有任意访问修饰符(publicprotectedprivate、默认(无修饰符))。
    • 可以访问外部类的所有成员(包括私有成员)。
  2. 静态内部类(Static Nested Class):

    • 前缀有 static 关键字的内部类,可以独立于外部类的实例存在。
    • 只能访问外部类的静态成员,不能直接访问非静态成员。
  3. 局部内部类(Local Inner Class):

    • 定义在外部类的方法或代码块内部,仅在该方法或代码块内部可见。
    • 可以访问该方法或代码块中的局部变量,前提是这些变量必须是 final 的。
  4. 匿名内部类(Anonymous Inner Class):

    • 既没有名字也没有构造器的特殊内部类,通常用于简化创建需要实现接口或继承特定类的临时对象的代码。
    • 创建时直接实例化,且只能实例化一次。

内部类与外部类的关系

  1. 对外部类成员的访问

    • 内部类可以直接访问外部类的所有成员(包括私有成员),无需任何访问修饰符。
    • 静态内部类不能直接访问外部类的非静态成员,但可以通过创建外部类实例来访问。
  2. 对外部类实例的隐式引用

    • 非静态内部类的每个实例都隐含着对外部类实例的引用,可以通过 OuterClass.this 显式引用。
    • 静态内部类没有对外部类实例的引用,因为它不依赖于外部类的实例。
  3. 内部类实例的创建

    • 非静态内部类的实例必须依赖于外部类的实例,创建时需要先有外部类实例。
    • 静态内部类的实例可以直接创建,无需外部类实例。

内部类的优点与使用场景

  1. 封装

    • 内部类可以访问外部类的私有成员,使得对外部类实现细节的封装更为彻底。
    • 静态内部类可以封装与外部类相关但不需要依赖外部类实例的逻辑。
  2. 代码组织

    • 内部类使得相关代码得以聚集,提高代码的可读性和可维护性。
    • 特别适用于事件监听器、回调函数、适配器等场景,将特定功能的类封装在使用它们的类内部。
  3. 匿名内部类

    • 用于简化代码,特别是在需要一次性实现接口或继承类,且仅使用一次的情况下。
  4. 解决多继承问题

    • Java 不支持多继承,但内部类可以实现多个接口或继承多个类,从而变相实现多继承的效果。

示例代码

java">public class OuterClass {private String outerField = "Outer Field";// 成员内部类public class InnerClass {public void accessOuter() {System.out.println(outerField); // 直接访问外部类的私有成员}}// 静态内部类public static class StaticNestedClass {public void accessOuter() {// 静态内部类不能直接访问非静态成员,但可以通过创建外部类实例OuterClass outer = new OuterClass();System.out.println(outer.outerField);}}// 局部内部类public void method() {final int localVar = 10; // 必须为 finalclass LocalInnerClass {public void accessLocal() {System.out.println(localVar);}}LocalInnerClass localInner = new LocalInnerClass();localInner.accessLocal();}// 匿名内部类实现接口public Runnable createRunnable() {return new Runnable() {@Overridepublic void run() {System.out.println("Running anonymously...");}};}
}

总之,Java 中的内部类是其面向对象特性的重要组成部分,通过内部类与外部类的关联关系,可以实现更深层次的封装、更灵活的代码组织以及简洁的匿名对象创建。内部类在解决特定编程问题、提高代码可读性和可维护性方面发挥着重要作用。


http://www.ppmy.cn/server/10324.html

相关文章

【GD32】_时钟架构及系统时钟频率配置

文章目录 一、有关时钟源二、系统时钟架构三、时钟树分析四、修改参数步骤1、设置外部晶振2、选择外部时钟源。3、 设置系统主频率大小4、修改PLL分频倍频系数 学习系统时钟架构和时钟树,验证及学习笔记如下,如有错误,欢迎指正。主要记录了总…

ElasticSearch实战之项目搜索高亮

文章目录 1. 前情配置2、数据操作2.1 操作API2.2 数据入库 3. 高亮搜索3.1 方法封装3.2 高亮搜索 1. 前情配置 为满足ElasticSearch可在项目中实现搜索高亮&#xff0c;我们需要先做一些前情配置 导入ElasticSearch依赖 <dependency><groupId>org.springframewor…

计算机网络-IS-IS链路状态数据库同步

在建立IS-IS邻接关系之后&#xff0c;路由器开始发送LSP报文进行链路状态数据库进行同步。 一、链路状态数据库同步 LSP&#xff08; Link State PDU&#xff0c;链路状态报文&#xff09; 用于交换链路状态信息。LSP分为两种&#xff1a;Level–1 LSP和Level–2 LSP。Level–1…

OpenCV轻松入门(九)——使用第三方库imgaug自定义数据增强器

安装命令&#xff1a;pip install imgaug 代码实现&#xff1a; import cv2 import random import matplotlib.pyplot as pltfrom imgaug import augmenters as iaa # 数据增强——缩放效果 def zoom_img(img):# 获取一个1-1.3倍的线性图像处理器&#xff0c;scale参数是缩放范…

在数字化转型过程中,企业的资产管理需要做出哪些调整?

在数字化转型过程中&#xff0c;企业的资产管理做出调整的常见于以下几个方面&#xff1a; 1、提高工作效率&#xff1a;数字化转型能够让员工在部门与部门之间的沟通更加顺畅&#xff0c;节省时间&#xff0c;提高效率。这要求企业在资产管理中采用数字化工具和流程&#xff…

Okhttp 403 Forbidden

android App 在使用okhttp下载全国中小企业股份转让系统的pdf文件时候,下载完成后使用MuPDF无法解析,提示文件损坏或者不是PDF文件,查看Okhttp的下载请求,发现报403 Forbidden错误: {protocol=http/1.1, code=403, message=Forbidden, url=https://www.neeq.com

Java设计模式-原型模式

概念&#xff1a; 原型模式是一种创建型设计模式&#xff0c;它允许通过复制现有对象来创建新对象&#xff0c;而无需通过标准构造函数来创建。在原型模式中&#xff0c;新对象的创建是通过克隆现有对象而实现的&#xff0c;因此它是基于原型对象的复制而创建新对象的。 在Jav…

RK平台 启动硬件加速

1.xml中添加需要加速的包名 /device/rockchip/rk356x/package_performance.xml <?xml version1.0 encodingutf-8 standaloneyes ?> <performance-package> <app package"com.antutu.ABenchMark" mode"1"/> <app package"com…