Java面向对象基础——10.内部类
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.class、Outer$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.内部类的更多相关文章
- 【重走Android之路】【Java面向对象基础(三)】面向对象思想
[重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinkin ...
- 【重走Android之路】【Java面向对象基础(一)】数据类型与运算符
[重走Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符 1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数 ...
- java面向对象-基础入门
java面向对象-基础入门 面向过程:线性思维 面向对象思维:物以类聚,分类的思维 对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是具体到某个微观 ...
- 【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder
[重走Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder 1.String String是Java中的一个final ...
- Java面向对象 Object类 内部类
Java面向对象 Object类 内部类 知识概要: 一:Object类 二:内部类 匿名内部类的写法 1.Object O ...
- 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结
086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...
- 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用
085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...
- 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字
084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...
- 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法
083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...
- 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法
082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...
随机推荐
- CSP2020复赛后日志
day0 死磕T1,1h30min后估30pts无从下手优化: 看到T2,貌似是组合数学,直接\(pass\) 看到T3,想到暴力--线段树--vector存展开指令--1h30min写完暴力继续T1 ...
- 【Java并发编程】面试必备之线程池
什么是线程池 是一种基于池化思想管理线程的工具. 池化技术:池化技术简单点来说,就是提前保存大量的资源,以备不时之需.比如我们的对象池,数据库连接池等. 线程池好处 我们为什么要使用线程池,直接new ...
- 关于springboot启动时,老找不到bean
spring可以管理部分工具类,但是不可以管理接口,也就是@Controller,@Component,@Repository,@Service不能放接口上. 就相当于new一个一个实例 但是你在使用 ...
- ATM1.0面条版test
[一]功能概要 [1]注册 [2]登陆 [3]取款 [4]存款 [5]查看流水 [6]查看银行信息(查看自己的卡号.余额) [7]初始化银行信息 [8]退出 [二]功能需求 [1]注册 (1)身份信息 ...
- HyperWorks分析模型的建立与边界条件施加
在HyperWorks完成了基本的网格剖分后,还需要赋予模型各类与求解相关的信息,方能最终生成可以递交求解器计算的输入文件.分析模型的建立与载荷及边界条件的创建包括以下内容: -定义待输出的目标求解器 ...
- PHP操作技巧
mysql_query("select count(*) from table") //得到字段的结果数 ****** rand(0,10) //随机数获取 ******* PHP ...
- 简单写一个C函数供C#代码调用
在C#中调用C++动态库导出的函数时,有时候需要封送一些复杂的数据结构,这时候不确定自己封送的数据的内存布局对不对,就想要弄个简单的C++项目模拟一下被调用的接口,检查一下C#的数据封送是否正确. 因 ...
- 自学stm32,需要会到什么程度能找到一份工作?
自学STM32,需要会到什么程度能找到一份工作?一个十年老兵的真心话 前言:一个改变命运的选择 每次有人问我"自学STM32到什么程度能找工作"这个问题,我都会想起十年前那个迷茫的 ...
- NVelocity模版引擎
NVelocity模版引擎 需要引用外部的NVelocity.dll文件 /// ///Person类 的摘要说明 /// public class Person { public Person() ...
- linux centos配置环境变量
前言 在centos上配置环境变量,有两种情况:分别是系统级别的,和用户级别的. 用户级别的 只对当前用户生效,切换至其他linux用户则无效. 系统级别的则对所有用户都生效(建议). 用户级别 .b ...