Java内部类总结

Java中的内部类(Nested Class)是指定义在另一个类内部的类,使用较少但是需要了解。

1. 内部类(Inner Class)

  • 定义方式:在外部类内部直接定义的类,无static修饰
    class Outer {
    class Inner { ... }
    }
  • 核心特性
    • 必须依附于外部类实例存在,不能单独创建
    • 实例化方式:Outer.Inner inner = outer.new Inner();
    • 持有外部类实例的引用,可通过Outer.this访问
    • 可直接访问外部类的private字段和方法
  • 编译产物:生成Outer$Inner.class文件

2. 匿名类(Anonymous Class)

  • 定义方式:在方法内部直接定义并实例化,无需显式类名
    Runnable r = new Runnable() {
    @Override
    public void run() { ... }
    };
  • 核心特性
    • 必须在定义时立即实例化
    • 可实现接口或继承普通类
    • 同样持有外部类实例引用,能访问其private成员
    • 适用于仅需一次性使用的简单类
  • 编译产物:生成Outer$1.classOuter$2.class等文件(按出现顺序编号)

3. 静态内部类(Static Nested Class)

  • 定义方式:用static修饰的内部类
    class Outer {
    static class StaticNested { ... }
    }
  • 核心特性
    • 独立存在,无需依附外部类实例
    • 实例化方式:Outer.StaticNested sn = new Outer.StaticNested();
    • 不能访问外部类的非静态成员,只能访问静态成员
    • 拥有外部类private成员的访问权限
  • 本质:逻辑上与外部类关联的独立类

共性与差异

类型 依附外部类实例 访问外部类private成员 静态成员访问
Inner Class 可访问静态和非静态
Anonymous Class 可访问静态和非静态
Static Nested Class 仅可访问静态

内部类的主要作用是实现类的逻辑聚合,同时保持对外部类私有成员的访问能力,在设计模式和回调机制中应用广泛。

Java面向对象基础——10.内部类的更多相关文章

  1. 【重走Android之路】【Java面向对象基础(三)】面向对象思想

    [重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想   1 面向对象的WWH   1.1 What--什么是面向对象         首先,要理解“对象”.在Thinkin ...

  2. 【重走Android之路】【Java面向对象基础(一)】数据类型与运算符

    [重走Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符   1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数 ...

  3. java面向对象-基础入门

    java面向对象-基础入门 面向过程:线性思维 面向对象思维:物以类聚,分类的思维 对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是具体到某个微观 ...

  4. 【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder

    [重走Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder   1.String String是Java中的一个final ...

  5. Java面向对象 Object类 内部类

     Java面向对象 Object类    内部类 知识概要:                 一:Object类                 二:内部类 匿名内部类的写法 1.Object O ...

  6. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  7. 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用

    085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...

  8. 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字

    084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...

  9. 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法

    083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...

  10. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

随机推荐

  1. CSP2020复赛后日志

    day0 死磕T1,1h30min后估30pts无从下手优化: 看到T2,貌似是组合数学,直接\(pass\) 看到T3,想到暴力--线段树--vector存展开指令--1h30min写完暴力继续T1 ...

  2. 【Java并发编程】面试必备之线程池

    什么是线程池 是一种基于池化思想管理线程的工具. 池化技术:池化技术简单点来说,就是提前保存大量的资源,以备不时之需.比如我们的对象池,数据库连接池等. 线程池好处 我们为什么要使用线程池,直接new ...

  3. 关于springboot启动时,老找不到bean

    spring可以管理部分工具类,但是不可以管理接口,也就是@Controller,@Component,@Repository,@Service不能放接口上. 就相当于new一个一个实例 但是你在使用 ...

  4. ATM1.0面条版test

    [一]功能概要 [1]注册 [2]登陆 [3]取款 [4]存款 [5]查看流水 [6]查看银行信息(查看自己的卡号.余额) [7]初始化银行信息 [8]退出 [二]功能需求 [1]注册 (1)身份信息 ...

  5. HyperWorks分析模型的建立与边界条件施加

    在HyperWorks完成了基本的网格剖分后,还需要赋予模型各类与求解相关的信息,方能最终生成可以递交求解器计算的输入文件.分析模型的建立与载荷及边界条件的创建包括以下内容: -定义待输出的目标求解器 ...

  6. PHP操作技巧

    mysql_query("select count(*) from table") //得到字段的结果数 ****** rand(0,10) //随机数获取 ******* PHP ...

  7. 简单写一个C函数供C#代码调用

    在C#中调用C++动态库导出的函数时,有时候需要封送一些复杂的数据结构,这时候不确定自己封送的数据的内存布局对不对,就想要弄个简单的C++项目模拟一下被调用的接口,检查一下C#的数据封送是否正确. 因 ...

  8. 自学stm32,需要会到什么程度能找到一份工作?

    自学STM32,需要会到什么程度能找到一份工作?一个十年老兵的真心话 前言:一个改变命运的选择 每次有人问我"自学STM32到什么程度能找工作"这个问题,我都会想起十年前那个迷茫的 ...

  9. NVelocity模版引擎

    NVelocity模版引擎 需要引用外部的NVelocity.dll文件 /// ///Person类 的摘要说明 /// public class Person { public Person() ...

  10. linux centos配置环境变量

    前言 在centos上配置环境变量,有两种情况:分别是系统级别的,和用户级别的. 用户级别的 只对当前用户生效,切换至其他linux用户则无效. 系统级别的则对所有用户都生效(建议). 用户级别 .b ...