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编程思想第四版读书笔记——第二章 一切都是对象

ava编程思想第四版读书笔记——第二章 一切都是对象

《Java编程思想第四版》笔记---18章(4) I/O 流式部分--管道流与对象流

管道流          管道流主要用于连接两个线程的通信。 管道流也分为字节流(PipedInputStream、PipedOutputStream)和字符流(PipedReader、...

Java编程思想第四版读书笔记——第八章 多态

本来不打算看了,现在面试笔试发现还是要重新拾起来看一遍。老老实实啃砖吧  第八章 多态 在面向底下的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。 “封装”通过合并特征和行为来创建新...

Java编程思想第四版读书笔记——第十四章 类型信息

第十四章 类型信息 关键词:RTTI,加载,泛型class引用,instanceof,isInatance,工厂设计模式,反射机制,代理设计模式,动态代理,空对象,反射获取private对象...

Java编程思想第四版读书笔记——第十二章 通过异常处理错误

第十二章 通过异常处理错误

阅读笔记--java编程思想第四版 --接口嵌套

/** * 该类是用于说明嵌套接口 */ class A{ interface B{ void fun(); } public class BImp impl...

《Java编程思想第四版》笔记---21章(2) 并发

1.java中的原子操作类(P684 21.3.4) 原子操作是指程序编译后对应于一条CPU操作指令,即原子操作是最小的不可再分指令集,编程中的原子操作是线程安全的,不需要使用进行线程同步和加锁机制来...

Java编程思想第四版读书笔记——第十六章 数组

第十六章 数组 1、数组为什么特殊 数组的效率高(唯一优点),它是一个简单的线性序列。 数组之所以优于泛型之前的容器,就是因为可以创建一个树去持有某种基本类型,意味着可以通过编译期检查,防止插入错误...

《Java编程思想第四版》笔记---21章(1) 并发

线程是进程中一个任务控制流序列,由于进程的创建和销毁需要销毁大量的资源,而多个线程之间可以共享进程数据,因此多线程是并发编程的基础。 多核心CPU可以真正实现多个任务并行执行,单核心CPU程序其实不是...

Java编程思想第四版读书笔记——第五章 初始化与清理

Java编程思想第四版第五章读书笔记——初始化与清理
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java编程思想(第四版)笔记(三)
举报原因:
原因补充:

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