39
39
- 你只需要关系如何` new ` ,而无需担心对象是何时或如何被` delete ` 。
40
40
- Java 拥有多种优秀的垃圾收集器GC实现。
41
41
42
-
43
-
44
42
## 基础OOP
45
43
46
44
???+ 关于package
@@ -142,11 +140,8 @@ this.brand = brand;
142
140
```
143
141
144
142
- * class* 的成员方法可以访问类的域和方法而不需要` this ` 指定。
145
-
146
143
- 但是如果出现了变量或者形参名字冲突,则需要` this. ` 手动指定。
147
144
148
-
149
-
150
145
### Instance Initialization Block 实例初始化块
151
146
152
147
在类中直接使用` {} ` 扩起来的部分称为实例初始化块,它会在任何构造器运行之前运行。
@@ -243,10 +238,6 @@ myCar.introduce();
243
238
244
239
- 使用` . ` 调用对象的方法/接口。
245
240
246
-
247
-
248
- ---
249
-
250
241
## Reuse Classes
251
242
252
243
所有人都喜欢代码重用。
@@ -255,11 +246,8 @@ myCar.introduce();
255
246
下面就来介绍面向对象中最基本的* 重用类* 方式:
256
247
257
248
- 组合 Composition。
258
-
259
249
- 继承 Inheritance。
260
250
261
-
262
-
263
251
### Composition 组合
264
252
265
253
- 组合指的是在新类中包含已有类的对象 * (的引用)* 。
@@ -273,14 +261,14 @@ public class Car {
273
261
}
274
262
```
275
263
276
- 组合描述了 * "has-a"* 关系。
264
+ 组合描述了 * "has-a"* 关系。
277
265
278
266
- 我们可以这种语义来建模更复杂、更贴合实际的汽车,如:
279
267
- 一辆汽车 * 有一个* 引擎。
280
268
- 一辆汽车 * 有四个* 轮子。
281
269
- 那么* 汽车* 的最大速度,就可以通过重用* 引擎* 中的数据或方法来进行计算。
282
270
283
- 组合对象的初始化:
271
+ 组合对象的初始化:
284
272
285
273
- 前面提到,对象* 引用* 的默认值是 ` null ` ,对其进行任何访问都会引发空指针异常 ` java.lang.NullPointerException ` 。
286
274
@@ -295,8 +283,6 @@ class Demo {
295
283
}
296
284
```
297
285
298
-
299
-
300
286
### Inheritance 继承
301
287
302
288
- * 继承* 是面向对象编程的重要特征之一。
@@ -327,6 +313,7 @@ public class Triangle extends Shape { ... }
327
313
```
328
314
329
315
在这个例子中:
316
+
330
317
- 矩形` Rectangle ` 圆形` Circle ` 三角形` Triangle ` 都 * 是一个* 几何图形 ` Shape ` 。
331
318
- ` Rectangle ` ` Circle ` ` Triangle ` 都包含了` Shape ` 提供的三个公开接口,即获取表面积 ` area() ` 绘制 ` draw() ` 判断点是否在图形内部 ` inside(double, double) ` 。
332
319
@@ -445,8 +432,6 @@ class Child extends Parent {
445
432
}
446
433
```
447
434
448
-
449
-
450
435
** Inheritance: Upcasting & Polymorphism 向上转型&多态**
451
436
452
437
继承带来的重要性质是* 向上转型 Upcasting* 和 * 多态 Polymorphism* 。
@@ -457,8 +442,6 @@ class Child extends Parent {
457
442
* Polymorphism* 指的是对父类函数的调用可能使用的子类的实现,会根据代码运行时,对象的实际类型进行动态分发。
458
443
` shape.area(); // Invoking Circle#area() `
459
444
460
-
461
-
462
445
** Inheritance: Polymorphism in Depth**
463
446
464
447
- 数据抽象、继承与多态时面向对象程序设计语言的三大基本特征.
@@ -580,8 +563,6 @@ class Bus {
580
563
581
564
在 Java 中,可以通过组合+手动转发的方法实现 delegate。
582
565
583
-
584
-
585
566
### Abstract Class
586
567
587
568
某些类本身就是作为其他类的父类而存在。比如上面提到的 ` Shape ` 类,它提供的接口实际上都是没有意义的哑实现,必须要借助具体的子类才能起作用。在 Java 中可以使用* 抽象类 Abstract Class * 来表达。
0 commit comments