码迷,mamicode.com
首页 > 编程语言 > 详细

《Java核心技术(卷一)》读书笔记——第六章:内部类

时间:2017-10-16 01:41:43      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:设置   action   blog   读书   cti   start   sdn   ctime   nbsp   

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核心技术(卷一)》读书笔记——第六章:内部类

标签:设置   action   blog   读书   cti   start   sdn   ctime   nbsp   

原文地址:http://www.cnblogs.com/zgj544/p/7675151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!