Java编程思想(第四版)笔记(三)

原创 2016年06月01日 15:29:19

第9章 接口

“确认接口是理想选择,因而应该总是选择接口而不是具体的类。”这其实是一种引诱。当然,对于创建类,几乎在任何时刻,都可以替代为创建一个接口和一个工厂。

许多人都掉进了这种诱惑的陷阱,只要有可能就去创建接口和工厂。这种逻辑看起来好像是因为需要使用不同的具体实现,因此总是应该添加这种抽象性。这实际上已经变成了一种草率的设计优化。

任何抽象性都应该是应真正的需求而产生的。当必需时,你应该重构接口而不是到处添加额外级别的间接性,并由此带来的额外的复杂性。这种额外的复杂性非常显著,如果你让某人去处理这种复杂性,只是因为你意识到由于以防万一而添加了新接口,而没有其他更有说服力的原因,那么好吧,如果我碰上这种事,那么就会质疑此人所做的所有设计了。

恰当的原则应该是优先选择类而不是接口。从类开始,如果接口的必需性变的非常明确,那么就进行重构。接口是一种重要的工具,但容易被滥用。

第10章 内部类

内部类自动拥有对其外围类所有成员的访问权。

内部类的对象只能在其外围类的对象相关联的情况下才能被创建(内部类是非static时)。

当将内部类向上转型为其基类,尤其是转型为一个接口的时候,这个内部类-----某个接口的实现-----能够完全不可见,并且不可用。所得到的只是指向基类或即接口的引用,所以能够很方便的隐藏实现细节。

10.7 嵌套类

如果不需要内部类对象与其外围类之间有联系,那么可以将内部类声明为static。这通常称为嵌套类。普通的内部类对象隐式地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static时,意味着:

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

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

嵌套类和普通的内部类还有一个区别。普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类。但是嵌套类可以包含所有这些东西。

正常情况下,不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分。你放到接口中的任何类都自动地是public和static的。因为类是static的,只是将嵌套类置于接口的命名空间内,这并不违反接口的规则。

10.8 为什么需要内部类

使用内部类最吸引人的原因是:每个内部类都能独立的继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。

接口解决了部分问题,而内部类有效地实现了“多重继承”。也就是说,内部类允许继承多个非接口类型(类或抽象类)。

如果不需要解决“多重继承”的问题,那么自然可以用别的方式编码,而不需要使用内部类。但如果使用内部类,还可以获得其他一些特性:

1)内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。

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

3)创建内部类对象的时刻并不依赖于外围类对象的创建。

4)内部类并没有令人迷惑的“is-a”关系;它就是一个独立的实体。


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Java 编程思想第四版 笔记

1-1 抽象过程 基于计算机结构和基于问题结构 解决小问题导致复杂性 复杂性反馈出问题 程序设计的需求来源于对复杂性的管理,解决问题的复杂性需要工具,程序设计实现工具的复杂性需要。 抽象过...

《Java编程思想》第四版笔记

《Java编程思想》第四版笔记 一、对象导论  所有编程语言都提供抽象机制。 1.1 Java面向对象的语言五个基本特性 1)万物皆为对象; 2)程序是对象的集合,它们通过通过发送消息告诉彼此所...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Java编程思想(第四版)笔记(三)

第9章 接口 “确认接口是理想选择,因而应该总是选择接口而不是具体的类。”这其实是一种引诱。当然,对于创建类,几乎在任何时刻,都可以替代为创建一个接口和一个工厂。 许多人都掉进了这种诱惑的陷阱,只要有...

java编程思想 第四版 第七章读书笔记

java编程思想读书笔记

第1章 对象导论

第1章 对象导论      “我们之所以将自然办分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来......除非赞成这个协定...

java编程思想读书笔记 第三章和第四章

java编程思想第三章和第四章读书笔记

Java编程思想(第四版)笔记(一)

闲来无事,重读一遍Java编程思想,有些自己感觉容易忘记的东西,记个笔记。 第2章 一切都是对象 22 基本类型 第3章 操作符 7 关系操作符 ...

《Java编程思想第四版》笔记---17章 容器

java集合容器框架图 集合主要分3大类: List特点:元素有放入顺序,元素可重复。 Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该...

Java 编程思想(第四版)学习笔记(3)操作符

第三章 操作符 一、更简单打印语句 Systme.out.println(""); 用更简单的方法打印语句如下:  Import java.util.*; Import static net...

《Java编程思想第四版》笔记---14章 类型信息

前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息。 Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)