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

Java基础篇--内部类

在Java中,允许在一个类的内部定义类,这样的类称作内部类,内部类所在的类称作外部类。在实际开发中,根据内部类的位置、修饰符和定义方式的不同,内部类可分为4种,分别是成员内部类、局部内部类、静态内部类、匿名内部类。

成员内部类(Member Inner Class):

  1. 定义在外部类的成员位置,与外部类的实例相关联,并且没有使用 static 修饰的内部类
  2. 可以直接访问外部类的所有成员,包括私有成员,并且可以通过外部类对象创建实例。
  3. 使用语法:外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

局部内部类(Local Inner Class):

  1. 定义在方法或代码块内部,作用范围仅限于所在的方法或代码块。
  2. 不能有访问修饰符,只能在定义它的方法或代码块中使用。
  3. 可以访问所在方法或代码块中的局部变量(必须是 final 或 effectively final)。
  4. 使用语法:class 内部类名 { ... }

静态内部类(Static Inner Class):

  1. 定义在外部类中,它是使用 static 修饰的内部类
  2. 与外部类的实例无关,通过 外部类名.内部类名 直接访问。
  3. 只能直接访问外部类的静态成员并创建实例,不能访问非静态成员。
  4. 使用语法:外部类名.静态内部类名 变量名 = new 外部类名().静态内部类名();

匿名内部类(Anonymous Inner Class):

  1. 没有显式的定义,直接通过实例化接口或抽象类来创建。
  2. 无需命名,通常用于临时需要覆写某个方法的情况,简化代码编写
  3. 可以是接口的实现类或继承自抽象类的子类。
  4. 使用语法:new 接口名/抽象类名() {   //匿名内部类实现部分}

以下的示例,演示了不同类型的内部类的使用:

public class OuterClass {private int outerVariable = 10;private static int outerStaticVariable = 20;// 成员内部类public class MemberInnerClass {public void display() {System.out.println("成员内部类:" + outerVariable);}}// 静态内部类public static class StaticInnerClass {public void display() {System.out.println("静态内部类:" + outerStaticVariable);}}// 方法示例public void displayLocalInnerClass() {int localVariable = 30; // 局部变量// 局部内部类class LocalInnerClass {public void display() {System.out.println("局部内部类:" + localVariable);}}LocalInnerClass localInnerObj = new LocalInnerClass();localInnerObj.display();}// 匿名内部类示例public void displayAnonymousInnerClass() {Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("匿名内部类");}};Thread thread = new Thread(runnable);thread.start();}public static void main(String[] args) {OuterClass outerObj = new OuterClass();// 使用成员内部类OuterClass.MemberInnerClass memberInnerObj = outerObj.new MemberInnerClass();memberInnerObj.display();//运行:成员内部类:10// 使用静态内部类OuterClass.StaticInnerClass staticInnerObj = new OuterClass.StaticInnerClass();staticInnerObj.display();//静态内部类:20// 调用局部内部类示例方法outerObj.displayLocalInnerClass();//局部内部类:30// 调用匿名内部类示例方法outerObj.displayAnonymousInnerClass();//匿名内部类}
}

这个示例中演示了四种不同类型的内部类的使用方式:

  1. 成员内部类(Member Inner Class):通过外部类实例创建内部类实例,能够访问外部类实例的成员变量。

  2. 静态内部类(Static Inner Class):直接通过外部类名访问内部类,与外部类实例无关,只能访问外部类的静态成员。

  3. 局部内部类(Local Inner Class):定义在方法中的内部类,仅在所在方法中可见,可以访问所在方法的局部变量,但被访问的局部变量必须是 final 或 effectively final 的。

  4. 匿名内部类(Anonymous Inner Class):通过实例化接口或抽象类来创建,并且没有显式的定义,常用于覆写一次性需要的方法。在示例中通过匿名内部类实现了 Runnable 接口并创建线程。

http://www.lryc.cn/news/130467.html

相关文章:

  • 完全备份、增量备份、差异备份、binlog日志
  • Flutter实现Service + UI 全面跨平台
  • 微软商店的ubuntu 连不上网Temporary failure in name resolution
  • “深入剖析JVM内部工作原理:解密Java虚拟机“
  • 数据结构与算法基础
  • 人工智能任务1-【NLP系列】句子嵌入的应用与多模型实现方式
  • 【Java并发编程面试题(60道)】
  • Python:逢七拍腿游戏
  • esp32C3 micropython oled 恐龙快跑游戏
  • 53.Linux day03 文件查看命令,vi/vim常用命令
  • YOLOv8改进后效果
  • 小程序的数据绑定和事件绑定
  • 第四章MyBatis核心配置文件
  • ⛳ Docker - Centos 安装配置
  • Python web实战之Django 的跨站点请求伪造(CSRF)保护详解
  • ARM(汇编指令)
  • 神经网络基础-神经网络补充概念-01-二分分类
  • Linux16(1) 线程同步
  • 深入探讨lowess算法:纯C++实现与局部加权多项式回归的数据平滑技术
  • Sui安全篇|详解零知识证明 (ZKP) Groth16的可塑性
  • 记录--webpack和vite原理
  • Windows系统中使用bat脚本启动git bash 并运行指定命令 - 懒人一键git更新
  • elementui form组件出现英文提示
  • 使用windows Api简单验证ISO9660文件格式,以及装载和卸载镜像文件
  • iPhone 15受益:骁龙8 Gen 3可能缺席部分安卓旗舰机
  • 理解持续测试,才算理解DevOps
  • 使用OpenCV与深度学习从视频和图像中精准识别人脸: Python实践指南
  • 面试之快速学习C++11-完美转发,nullptr, shared_ptr,unique_ptr,weak_ptr,shared_from_this
  • android resoure资源图片颜色值错乱
  • leetcode第 357/358 场周赛