Thinking in Java 第九章接口读书笔记

1.第九章一上来就说了接口的作用:接口与内部类为我们提供一种将接口与实现分离的更加结构化的方法。所以这一句的重点我认为就是将抽象与实现分离开来,从而让代码更加灵活。

2.再讲接口之前书中先讲了抽象类,书中说到:包含抽象方法的类叫做抽象类。后面又提到,抽象类中也可以没有抽象方法,那么这种抽象类的意义只是防止别人创建它的实例,所以其实可以这么理解,用 abstract 修饰的类就是抽象类。

3.上面提到了抽象方法,那我们来看看什么是抽象方法:

//  抽象方法是一种不完整的方法,因为它只有方法声明没有方法体,
//  并通过 absrtact 修饰
absrtact void absrtactMethod();

4.我们看到了抽象方法其实不完整就使得拥有该方法的类也是不完整的,所以书中说到:包含抽象方法的类叫做抽象类。如果某个类继承自它,那么就只存在两种可能性:一是实现该抽象类中所有抽象方法,二是实现部分或者不实现任何抽象方法,那么第二种情况就使得这个实现了抽象类的类也变成了一个不完整的类,也就是抽象类,这么说有点绕口,简单地说实现了某个抽象类不实现抽象方法那么这个类就也是抽象的,需要在 class 前用 absrtact 修饰。

5.抽象类和抽象方法非常有用,因为它们可以使类的抽象性明确起来,我的理解是说一个类如果继承自抽象类,且自身想成为一个普通的类,那么就必须实现抽象类中的所有抽象方法,这点是非常明确的,因为这个类知道了自己一定要去实现哪些方法。

5.本章的名字是接口,下面我们就来着重介绍一下接口,一个接口表示:「所有实现了该特定接口的类看起来都像是这样。」,所以人们在讨论接口的时候都会这么说它,它是暴露在外部的规则。

6.引入 interface 关键字替换掉 class 也就可以产生一个极度抽象的类,而同时接口一个十分关键的作用,那就是来实现某种类似多重继承变种的特性,我们都知道 Java 中只能继承一个类,也就是所谓的单继承,而引入接口后我们通过 implement 可以实现多个接口,实现类可以向上转型为接口,就显得该实现类可以同时向上转型为多个类,从而拓展了 Java 的单继承原则。

7.接口的使用我就不举例子了,我们来说说接口内部的特性,接口中可以包含方法也可以包含属性,方法默认的被 public 和 abstract 修饰,属性默认的被 static 和 final 修饰。

interface Instrument {
    //  static & final
    int VALUE = 5;
    //  public & abstract
    void play();
}

8.接口不仅仅只是一种更纯粹形式的抽象类,它还有更高的目标:实现类似 C++ 中中的多重继承。

9.书中提到使用接口的核心原因是,为了能够向上转型为多个基类型(以及由此带来的灵活性)。次要原因与抽象类相同,防止外界创建对象。

10.使用接口还是使用抽象类?书中给出了这样的回答:如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口,而不是抽象类。事实上,如果知道某事物应该成为一个基类,那么第一选择应该是使它成为一个接口。

11.类与类之间是继承关系,类与接口之间是实现关系,而接口与接口之间又是继承关系,我们可以通过继承某一个或某几个接口,从而拓展当前接口的功能。

interface Monster {
    void menace();
}

interface Lethal {
    void kill();
}

interface Vampire extends Monster, Lethal {
    void drinkBlood();
}

class VeryBadVamprice implement Vampire {
    public void menace() {}
    public void kill() {}
    public void drinkBlood() {}
}

12.接口最吸引人的地方就是允许一个接口可以具有多个不同的具体实现,而接口的一种常见的用法就是策略模式。策略模式的定义是这样的:策略模式定义了一系列的算法,并将每个算法封装起来,而且使它们可以相互替换。这里实际就是抽取出一个算法接口,然后实现不同的算法,我只要定义一个接收算法接口的作为参数方法就可以了,调用该方法时只要传递不同的算法实现就可以了,这里也运用到了开闭原则和里氏替换原则。

13.借用本章总结的最后一句话,恰当的原则应该是优先选择类而不是接口。借口是一种很重要的工具,但是它们容易被滥用。

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,036评论 0 4
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,202评论 0 2
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,048评论 0 62
  • 我把石头还给石头 / 让胜利的胜利 / 今夜青稞只属于他自己 / 一切都在生长 / 今夜我只有美丽的戈壁 空空 ...
    老猫szq阅读 949评论 30 13