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

【Java基础面试题022】什么是Java内部类?有什么作用?

回答重点

Java内部类是指:在一个类的内部定义的类,Java支持多种类型的内部类,包括成员内部类、局部内部类、匿名内部类和静态内部类。实际上内部类是一个编译层面的概念,像一个语法糖一样,经过编译器之后其实内部类会提升为外部顶级类,和外部类没有任何区别,所以在JVM中是没有内部类的概念的

内部类的主要作用:

  • 封装性:将逻辑相关的类封装的在一起
  • 访问外部类成员:内部类可以方便的访问外部类的成员变量和方法,尤其在需要操作外部类兑现的场景下非常有用
  • 简化代码:对于只在一个地方使用的小类,内部类可以减少冗余代码,简化结构
  • 事件处理:匿名内部类广泛用于实现回调函数或事件监听,简化了代码结构,特别是对于实现接口或抽象类的场景

扩展知识

四种内部类

包括:

  • 成员内部类:非静态类,作为外部类的一个成员。它可以直接访问外部类的所有成员,包括私有成员
  • 局部内部类:定义在方法或代码块中的类,仅在该方法和代码块中可见,通常用于临时的对象构建
  • 匿名内部类:没有类名的内部类,所以只能临时用一次,通常用于创建短期使用的实例对象,尤其是在接口回调或事件处理时被广泛使用
  • 静态内部类:static修饰的静态类,属于类,无法访问外部类的非静态成员,只能访问外部类的静态成员

成员内部类

public class OuterClass {
    private String outerField = "Outer Field";

    class InnerClass {
        void display() {
            System.out.println("Outer Field: " + outerField);
        }
    }

    public void createInner() {
        InnerClass inner = new InnerClass();
        inner.display();
    }
}

静态内部类

public class OuterClass {
    private static String staticOuterField = "Static Outer Field";

    static class StaticInnerClass {
        void display() {
            System.out.println("Static Outer Field: " + staticOuterField);
        }
    }

    public static void createStaticInner() {
        StaticInnerClass staticInner = new StaticInnerClass();
        staticInner.display();
    }
}

局部内部类

public class OuterClass {
    void outerMethod() {
        final String localVar = "Local Variable";

        class LocalInnerClass {
            void display() {
                System.out.println("Local Variable: " + localVar);
            }
        }

        LocalInnerClass localInner = new LocalInnerClass();
        localInner.display();
    }
}

匿名内部类

public class OuterClass {
    interface Greeting {
        void greet();
    }

    public void sayHello() {
        Greeting greeting = new Greeting() {
            @Override
            public void greet() {
                System.out.println("Hello, World!");
            }
        };
        greeting.greet();
    }
}


http://www.kler.cn/a/449977.html

相关文章:

  • 解析mysqlbinlog
  • Java代码覆盖率super-jacoco
  • Docker快速入门到项目部署
  • 2.6 网络面试问题
  • 梳理你的思路(从OOP到架构设计)_简介设计模式
  • LightGBM分类算法在医疗数据挖掘中的深度探索与应用创新(上)
  • Qt笔记-Qt Creator开发环境搭建
  • C#(委托)2
  • 放弃机器学习框架,如何用Python做物体检测?
  • 监控MySQL数据表变化:Binlog的重要性及实践
  • 自建MD5解密平台-续
  • mysql中局部变量_MySQL中变量的总结
  • 【YashanDB知识库】Oracle pipelined函数在YashanDB中的改写
  • 蓝桥杯练习生第四天
  • Blazor 直接读取并显示HTML 文件内容
  • VSCode如何修改默认扩展路径和用户文件夹目录到D盘
  • 关于mac—address
  • linux安装宝塔面板及git
  • 基于Spring Boot的个性化推荐外卖点餐系统
  • HarmonyOS(72)事件拦截处理详解
  • Certifying LLM Safety against Adversarial Prompting
  • 网络管理 详细讲解
  • 网络安全(一)主动攻击之DNS基础和ettercap实现DNS流量劫持
  • BOE(京东方)“向新2025”年终媒体智享会落地成都 持续创新引领产业步入高价值增长新纪元
  • MongoDB教程001:基本常用命令(数据库操作和集合操作)
  • 跨模态知识迁移:基于预训练语言模型的时序数据建模