Thinking in Java 第十章内部类读书笔记

1.本章上来第一句就说了什么是内部类,一个在类的定义放在另一个的类内部。

2.内部类拥有外部类其外围类的所有元素的访问权,包括私有的。

3.当某个外围类的对象创建了一个内部类对象时,吃内部类对象必定会秘密地捕获一个指向那外围类对象的引用。然后在你访问此外围类的成员时,就是用那个引用来选择外围类的成员的。这些编译器豆瓣我们做好了,我们可以之前看到的是,内部类的对象只能在于其外围类的对象相关联的情况下被创建(在内部类是非 static 时)。

4.在拥有外部类对象之前不可能创建内部类对象,因为内部类对象会隐式的持有外部类对象的引用,而其实用 static 修饰的内部类叫嵌套类,嵌套类不需要对外部类对象的引用,这个我们后面会介绍到。

创建内部类对象

5.内部类的作用之一是隐藏代码实现,此外还有就是实现某个接口,从而向上转型并返回对其的引用。

6.在方法的作用域内创建的类,叫做局部内部类。

局部内部类

7.当然在6的基础上其实内部类,可以放在任意的作用域内,例如:if 语句内等等。

8.匿名内部类,也就是没有名字,作用是创建一个继承自 A 的匿名类的对象,然而如果我在匿名内部类创建的别的特性,在我向上转型后,这些特性其实又消失掉了,因为这是一个没有名字的类,所以也就无从谈起它的向下转型,而我向上转型后也只是可以调用基类的一些属性,所以匿名内部类可以用来创建某个接口的实现类等等。

匿名内部类使用

9.匿名内部类不可能有构造器,因为它连名字都没有。

10.如果方法中的某个变量被匿名内部类使用到,那么就必须要加 final 前缀,前面的参数只是传递到了构造中,所以无需 final,而后面的参数被匿名内部类使用,所以需要使用 final 修饰,我之前一直不是特别懂为什么,之前去网上查过,记得好像是说,方法结束后,但是我依然需要使用那么变量,正常情况下, 方法的参数随着方法调用的技术也就消失了,所以为了可以更长时间的被引用着,即方法被销毁后依然可以使用(可能说的不对,还是请自行 Google)。

在匿名内部类使用方法参数

11.嵌套类,书中是这么介绍嵌套类的,如果不需要内部对象与其外围类对象之间有联系,那么就可以将内部类声明为 static,这通常称为嵌套类。

12.创建普通的内部类对象会隐式的持有一个外围类对象的引用,而嵌套类不是,这也意味着:

(1)要创建嵌套类的对象,并不要其外围类的对象。

(2)不能从嵌套类的对象中访问非静态的外围类对象。

13.其实嵌套类使用了 static 修饰,也就说明了它其实是独立于对象的。

14.普通的内部类不能有 static 数据和 static 字段,也不能有嵌套类,而嵌套类啥都能有。

15.接口中的内部类为嵌套类,因为接口中的类都被自动的变成 public 和 static 的了。

16.为什么需要内部类?书中给了这样的答案:每个内部类都能独立的继承自一个(接口的)实现,所以不论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。所以说实在的还是使得多重继承的解决方案变得更完整,接口已经解决了部分问题,而内部类有效地实现了“多重继承”。

17.内部类可以有多个实例,每个实例都有自己的状态信息,并且与外围类对象的信息想独立。

18.在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或继承同一个可类。

19.内部类的继承使用,如果只是使用 Dot 默认的无参构造会报错,而必须使用 Dot 继承的内部类的外围类的对象作为构造参数,并通过 super() 调用 DotNew 的构造,使得 DotNew 得到初始化,这样才能使得继承的内部类有外围类引用,因为我们都知道继承的时候我们会先去执行父类的构造,而内部类需要一个外围类的引用,所以就要先初始化内部类的外围类,使得内部类的构造得到正常的初始化(我是这么认为的)。

内部类的继承使用

20.局部内部类与匿名内部类相比,局部内部类可以有构造器,而构造器就可以让我们进行初始化。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 可以将一个类的定义放到另一个类的定义内部,这就是内部类。 10.1 创建内部类 如果想从外部类的非静态方法之外的任...
    张利强阅读 1,017评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • 今天整理一下内部类,其中包含了内部类的特殊形式,对比普通类有什么区别和作用,内部类和外围类之间的联系,内部类的扩展...
    _小二_阅读 593评论 0 3
  • 《Thinking In Java》内部类 定义:可以将一个类的定义放在另一个类的内部,这就是内部类。 创建内部类...
    RonaldoWang阅读 326评论 0 2
  • 第一章 对象导论 对象具有状态、行为和标识。这意味着每一个对象都可以拥有内部数据和方法,并且每一个对象都可以唯一地...
    niaoge2016阅读 802评论 0 0