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

静态内部类和非静态内部类的区别

// 外部类
class OuterClass {
    private String instanceVar = "外部类实例变量"; // 实例变量
    private static String staticVar = "外部类静态变量"; // 静态变量

    // 非静态内部类
    class InnerClass {
        void display() {
            // 访问外部类的实例变量和静态变量
            System.out.println("非静态内部类访问:" + instanceVar);
            System.out.println("非静态内部类访问:" + staticVar);
        }
    }

    // 静态内部类
    static class StaticInnerClass {
        static void staticMethod() {
            System.out.println("静态内部类中的静态方法");
        }

        void display() {
            // 只能访问外部类的静态变量,不能直接访问实例变量
            System.out.println("静态内部类访问:" + staticVar);
            // System.out.println(instanceVar); // ❌ 编译错误,不能访问外部类的实例变量
        }
    }
}

public class Main {
    public static void main(String[] args) {
        // 1. 实例化非静态内部类(必须先创建外部类实例)
        OuterClass outer = new OuterClass();
        OuterClass.InnerClass inner = outer.new InnerClass();
        inner.display();

        // 2. 实例化静态内部类(可以直接创建,无需外部类实例)
        OuterClass.StaticInnerClass staticInner = new OuterClass.StaticInnerClass();
        staticInner.display();

        // 3. 访问静态内部类的静态方法(不需要实例化)
        OuterClass.StaticInnerClass.staticMethod();
    }
}
  • 非静态内部类 (InnerClass)

    • 依赖外部类实例,必须先创建OuterClass实例,才能创建InnerClass对象(outer.new InnerClass())。

    • 可以访问外部类的实例变量和静态变量

  • 静态内部类 (StaticInnerClass)

    • 不依赖外部类实例,可以直接创建对象(new OuterClass.StaticInnerClass())。

    • 不能访问外部类的实例变量,但可以访问静态变量

    • 可以定义静态成员,如staticMethod(),可以直接调用 OuterClass.StaticInnerClass.staticMethod()

http://www.dtcms.com/a/67978.html

相关文章:

  • CSS:使用内边距时,解决宽随之改变问题
  • Linux 下 MySQL 8 搭建教程
  • 算法题(97):you
  • 如何处理PHP中的编码问题
  • CUDA编程之内存零拷贝技术
  • C++中通过虚函数实现多态的原理
  • 优化Go错误码管理:构建清晰、优雅的HTTP和gRPC错误码规范
  • 一文掌握 RAG 的原理和对应的2个案例
  • 江苏无锡一家汽车零部件企业终止,拓展氢燃料电池存不确定性
  • Python说明
  • Linux 进程的创建、终止、等待与程序替换函数 保姆级讲解
  • Qt QML实现鼠标自由选择不规则区域进行截图
  • 编程自学指南:java程序设计开发,Java I/O流,为什么需要I/O流?,Java I/O体系结构,字节流,字符流,对象流与序列化
  • 深入理解Spring Boot:快速构建现代化的Java应用
  • C++中,存储持续性、作用域和链接性
  • 一般机器学习有哪些算法?
  • python笔记2
  • LeeCode题库第643题
  • 用Maven创建只有POM文件的项目
  • MCU的工作原理:嵌入式系统的控制核心
  • 解决 Docker 镜像拉取超时问题:配置国内镜像源
  • 【深度学习|目标检测】YOLO系列anchor-based原理详解
  • 注意力机制,层归一化,RBA。KAN-ODE,小波KAN
  • 提升开发效率的FPGA/IC小工具
  • 文件解析漏洞详解
  • 微软 System Center Configuration Manager(SCCM)的组件文件
  • Python中可调用对象的意义和用途
  • C++类和对象(中) 之 【运算符重载、赋值运算符重载、前置++与后置++、const成员、取地址及const取地址操作符重载】
  • SmartFormat:轻量级文本模板库,轻松替代 string.Format
  • MyBatis 的一级、二级缓存