Thinking in Java 读书笔记 — 第1章 对象导论

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
第1章 对象导论
1.1 抽象过程
1.2 每个对象都有一个接口
1.3 每个对象都提供服务
1.4 被隐藏的具体实现
1.5 复用具体实现
1.6 继承
1.6.1 “是一个”与“像是一个”的关系
1.7 伴随多态的可互换现象
1.8 单根继承结构
1.9 容器
1.9.1 参数化类型
1.10 对象的创建和生命周期
1.11 异常处理:处理错误
1.12 并发编程
1.13 Java与Internet
1.13.1 Web是什么
1.13.2 客户端编程
1.13.3 服务端编程
1.14 总结

我的总结

Java是一种纯面向对象的语言(虽然含有基本数据类型,但那不是主要部分),我们经常谈到面向对象三大特性:继承、封装、多态,除此之外,还有以下的描述。

  1. 万物皆对象。对象是抽象出来解决问题的任何程序构件,包括数据结构、班级、服务等。
  2. 程序是对象的集合,通过结合使用不同的对象解决问题,对象通过发送消息(一般指方法调用)告知彼此所要做的。
  3. 每个对象都有类型。通俗的说法是,每个对象都是某个类(class)的一个实例(instance)。类型决定对象的这个特性:可以发送什么样的消息给它。
  4. 某一特定类型的所有对象都可以接受同样的消息。

类是对象的接口,接口是一种协议,一种共同约定,发送/接收消息格式的限定。类似的,Java中有很多类似的思想,后面还会遇到。比如从class -> SomeType —> new —> instance,中间有Interface、AbstractClass等,都有类似的思想。

关于单根继承结构,在JDK 1.8中已经有了变化。Java是允许一个类实现多个接口的,到了JDK 1.8,接口引入了新的特性:默认实现,关键字是default。在下面的代码中,有相当于多根继承的特点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
interface InterfaceA {
default void test1() {
System.out.println("InterfaceA");
}
}
interface InterfaceB {
default void test2() {
System.out.println("InterfaceB");
}
}
class Demo implements InterfaceA, InterfaceB {
public void test() {
test1();
test2();
}
}

执行new Demo().test(),可以看到以下结果:

1
2
InterfaceA
InterfaceB

虽然有悖于之前的直觉—Java是单继承的,但是并没有破坏其面向对象的原则。在Java中,接口更倾向于描述行为规范,与类型还是有区别的,是另一种维度的描述,所以在新版本引入这个特性也是可以理解的。

关于并发,有很重要的一点是,尽量避免共享资源。

除了良好的语言设计,Java的繁荣也是和丰富的开源资源分不开的。而且Java与时俱进,适时加入新特性,方便Developers不断地实现新需求。呵呵哒,需求的产生速度是永远远大于开发速度的,当然,这又是另一个问题了。