《Java核心技术(卷一)》读书笔记——第六章:内部类
1. 内部类的概念?
类中类
2. 为什么要用内部类?
内部类的方法可以访问外部类的实例域
内部类对外部类的同一个包中的类实现了隐藏
匿名内部类在“想要定义一个回调函数却又不想编写大量代码”时非常便捷
3. 内部类语法详谈(常规)
1. 内部类与外部类是类之间的关系,不是对象之间的关系
虽然TimePrinter类位于TalkingClock类的内部,但这并不意味着,每个TalkingClock对象都有一个TimePrinter实例域。因为,TimePrinter对象是由start方法构造的,亦即,如果TalkingClock对象不调用start方法,便不拥有一个TimePrinter实例域。
2. 内部类既可以访问自己的数据域,又可以访问创建它的外部类对象的实例域
3. 内部类的隐式引用:指向外部类对象(编译器负责)
if ( beep )——》if ( outer.beep) //outer仅用作示意,编译器内部当然不会是outer
指向外部类的隐式引用在构造器中设置。编译器修改了内部类所有的构造器,添加一个引用外部类的参数。即使并没有定义内部类的构造器,编译器也会为内部类生成一个默认的构造器。如:publicTimePrinter(TalkingClock clock) { outer = clock; }
当在start方法中创建了内部类对象后,编译器就会将this引用传递给当前的构造器
ActionListenerlistener = new TimePrinter(this);
4. 将内部类声明为 private,实现对外隐藏,只有外部类可以构造内部类对象
5. 在外部类的作用域之外引用内部类
outerClass.InnerClass
4. 内部类的特殊语法:如何正确使用外部类引用参数
a) 内部类访问外部类实例域
if( beep )——》if( TalkingClock.this.beep );
b) 内部类构造器
ActionListener listener = this.new TimePrinter();
/* 通过这种方法构造的内部类,它的隐式引用与this指向了同一对象 */
c) 通过显示命名,将外部类引用设置为其他对象
下述代码,在TimePrinter公有的情况下,任意外部类都可以构造一个TimePrinter
TalkingClockjabber = new TalkingClock(1000, true);
TalkingClock.TimePrinter listener = jabber.newTimePrinter();
录自http://blog.csdn.net/Reese1995/article/details/77848502?ref=myread
《Java核心技术(卷一)》读书笔记——第六章:内部类的更多相关文章
- 《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(1)
		
<Microsoft Sql server 2008 Internals>索引文件夹: <Microsoft Sql server 2008 Internals>读书笔记--文 ...
 - C primer plus 读书笔记第六章和第七章
		
这两章的标题是C控制语句:循环以及C控制语句:分支和跳转.之所以一起讲,是因为这两章内容都是讲控制语句. 第六章的第一段示例代码 /* summing.c --对用户输入的整数求和 */ #inclu ...
 - Java核心技术卷一基础知识-第14章-多线程-读书笔记
		
第 14 章 多线程 本章内容: * 什么是线程 * 中断线程 * 线程状态 * 线程属性 * 同步 * 阻塞队列 * 线程安全的集合 * Collable与Future * 执行器 * 同步器 * ...
 - Java核心技术卷一基础技术-第13章-集合-读书笔记
		
第13章 集合 本章内容: * 集合接口 * 具体的集合 * 集合框架 * 算法 * 遗留的集合 13.1 集合接口 Enumeration接口提供了一种用于访问任意容器中各个元素的抽象机制. 13. ...
 - Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记
		
第12章 泛型程序设计 本章内容: * 为什么要使用泛型程序设计 * 定义简单泛型类 * 泛型方法 * 类型变量的限定 * 泛型代码和虚拟机 * 约束与局限性 * 泛型类型的继承规则 * 通配符类型 ...
 - Java核心技术卷一基础知识-第11章-异常、断言、日志和调试-读书笔记
		
第11章 异常.断言.日志和调试 本章内容: * 处理错误 * 捕获异常 * 使用异常机制的技巧 * 使用断言 * 日志 * 调试技巧 * GUI程序排错技巧 * 使用调试器 11.1 处理错误 如果 ...
 - Java核心技术卷一基础知识-第9章-Swing用户界面组件-读书笔记
		
第9章 Swing用户界面组件 本章内容: * Swing与模型-视图-控制器设计模式 * 布局管理概述 * 文本输入 * 选择组件 * 菜单 * 复杂的布局管理 * 对话框 本章将介绍构造功能更加齐 ...
 - Java核心技术卷一基础知识-第8章-事件处理-读书笔记
		
第8章 事件处理 本章内容: * 事件处理基础 * 动作 * 鼠标事件 * AWT事件继承层次 8.1 事件处理基础 在AWT所知的事件范围内,完全可以控制事件从事件源(event source)例如 ...
 - Java核心技术卷一基础知识-第7章-图形程序设计-读书笔记
		
第7章 图形程序设计 本章内容: * Swing概述 * 创建框架 * 框架定位 * 在组件中显示信息 * 处理2D图形 * 使用颜色 * 文本使用特殊字体 * 显示图像 本章主要讲述如何编写定义屏幕 ...
 
随机推荐
- swiper 不同页面高度自适应
			
在使用swiper写页面滑动时发现不同页面高度无法自适应,使用autoHeight:true也不起作用 研究了一下发现可以这样设置 .swiper-slide{ overflow: hidden; } ...
 - seo相关知识
			
网络营销菜鸟SEO入门必杀技(转载:http://blog.sina.com.cn/s/blog_5ef0fe8b0100n9cw.html) 搜索引擎优化(Search Engine Optimiz ...
 - 小白的首个maven web项目Step1软件安装三(8.0.15mysql及workbench安装)
			
直接先开始下 MySQL 和 Workbench(mysql的可视化工具) ,注意下得是镜像版 .msi 后缀的 (mysql是纯控制面板的呈现方式,想要界面化操作可以装可视化工具,这里我装的是wor ...
 - js中三种弹出框
			
javascript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prompt()来获得,可以利用这些对话框来完成js的输入和输出,实现与用户能进行交互的js代码 ...
 - AJAX 解决什么问题?如何使用AJAX?AJAX 有什么问题需要注意?项目中哪里用到了AJAX?
			
ajax 解决的问题就是“无刷新更新页面”,用传统的HTML 表单方式进行页面的更新时,每次都要将请求提交到服务器,服务器返回后再重绘界面,这样界面就会经历:提交→变白→重新显示这样一个过程,用户体验 ...
 - Python之列表方法
			
def __init__(self, seq=()): """ list() -> new empty list list(iterable) -> new ...
 - 修改hbuilder背景颜色为护眼模式
			
复制以下代码,保存为.tmTheme文件导入HBuilder <?xml version="1.0" encoding="UTF-8"?> < ...
 - javascript数据加减问题
			
需要parseInt把获取到的html(),text()的值转换为数字型,然后进行加减乘除操作就可以了:
 - MySQL数据库语句
			
一 . 常用mysql命令行命令 1 .启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2 . netstat –na | ...
 - Shell bash 数学运算 bc
			
1.bc命令可以完成浮点数的运算.其中 scale可以指定保留的小数点位数. 2.举例 例1: 例2: