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

内部类 示例

package com.example.demo1;// 外部类
public class OuterClass {private int outerField = 10;private static int staticOuterField = 20;// 成员内部类public class MemberInnerClass {public void display() {// 成员内部类可以访问外部类的实例变量System.out.println("MemberInnerClass: outerField = " + outerField);System.out.println("MemberInnerClass: staticOuterField = " + staticOuterField);}}// 静态内部类public static class StaticInnerClass {public void display() {// 静态内部类只能访问外部类的静态变量System.out.println("StaticInnerClass: staticOuterField = " + staticOuterField);}}public void outerMethod() {int localVariable = 30;// 局部内部类class LocalInnerClass {public void display() {// 局部内部类可以访问外部类的实例变量和局部变量(局部变量需为 final 或事实上的 final)System.out.println("LocalInnerClass: outerField = " + outerField);System.out.println("LocalInnerClass: staticOuterField = " + staticOuterField);System.out.println("LocalInnerClass: localVariable = " + localVariable);}}LocalInnerClass localInner = new LocalInnerClass();localInner.display();// 匿名内部类Runnable anonymousInner = new Runnable() {@Overridepublic void run() {// 匿名内部类可以访问外部类的实例变量和局部变量(局部变量需为 final 或事实上的 final)System.out.println("AnonymousInnerClass: outerField = " + outerField);System.out.println("AnonymousInnerClass: staticOuterField = " + staticOuterField);System.out.println("AnonymousInnerClass: localVariable = " + localVariable);}};new Thread(anonymousInner).start();}public static void main(String[] args) {OuterClass outer = new OuterClass();// 创建成员内部类实例OuterClass.MemberInnerClass memberInner = outer.new MemberInnerClass();memberInner.display();// 创建静态内部类实例OuterClass.StaticInnerClass staticInner = new OuterClass.StaticInnerClass();staticInner.display();// 调用包含局部内部类和匿名内部类的方法outer.outerMethod();}
}

成员内部类(MemberInnerClass:定义在外部类内部,无 static 修饰。它能访问外部类的实例变量和静态变量,创建成员内部类实例时,需要依赖外部类实例。

静态内部类(StaticInnerClass:定义在外部类内部,用 static 修饰。它只能访问外部类的静态变量,创建静态内部类实例时,不依赖外部类实例。

局部内部类(LocalInnerClass:定义在方法内部。它可以访问外部类的实例变量和方法内的局部变量,但局部变量必须是 final 或事实上的 final

匿名内部类:没有类名的局部内部类,通常用于实现接口或继承抽象类。在上述示例中,实现了 Runnable 接口。

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

相关文章:

  • 【java安全】springBoot配置文件属性名自定义及属性值加密
  • 【6.1.0 漫画数据库技术选型】
  • 建造者模式(Builder)
  • 【Datawhale AI 夏令营】 用AI做带货视频评论分析(二)
  • 微服务环境下的灰度发布与金丝雀发布实战经验分享
  • 【电脑】硬盘驱动器(HDD)的基础知识
  • 消息认证码(message authentication code)MAC
  • skywalking镜像应用springboot的例子
  • 【设计模式】单例模式 饿汉式单例与懒汉式单例
  • jenkins自动化部署前端vue+docker项目
  • 并发--Callable vs Runnable
  • 代码随想录算法训练营第三十二天|LeetCode 509 斐波那契数,LeetCode 70 爬楼梯,LeetCode 746 使用最小花费爬楼梯
  • 笔记-分布式计算基础
  • 云计算三大服务模式深度解析:IaaS、PaaS、SaaS
  • zynq-PS篇——bperez77中DMA驱动注意事项
  • 飞算 JavaAI 智能编程助手:颠覆编程旧模式,重构新生态
  • 深入解析Java的G1收集器:原理、实战与优缺点
  • Umi-OCR 的 Docker安装(win制作镜像,Linux(Ubuntu Server 22.04)离线部署)
  • 企业采购成本越来越贵?根源在哪,数据怎么分析?
  • 奇哥面试记:SpringBoot整合RabbitMQ与高级特性,一不小心吊打面试官
  • 供应链管理-计划:产能策略
  • Java 并发AQS为什么是双向链表
  • [面试] 手写题-选择排序
  • 学习C++、QT---20(C++的常用的4种信号与槽、自定义信号与槽的讲解)
  • JavaAI时代:重塑企业级智能开发新范式
  • 秋招小白学数据结构-1-数据结构前置知识
  • 面向构件的编程(COP)深度解析:构建模块化系统的工程范式
  • Linux_3:进程间通信
  • (六)复习(OutBox Message)
  • 游戏的程序员会不会偷偷改自己账号的数据?