1.關于抽象的進步。面向對象OOP的設計思路其實是把“抽象”這種編程方法進行了新的解釋說明,把具體的人或事務抽象成了“類”“對象”的形式。
面向對象的主要思想:
- 萬物即對象
- 程序是對象的組合
- 每個對象都有自己的空間,可以容納其他對象
- 每個對象都有自己的實例
- 同一類的所有對象都能接收相同的消息
2.對象的接口
通過類構造對象,對象開放給使用者接口,此時使用者可以通過類的對象的接口給對象發出請求。
3.面向對象編程要提供給兩個使用者:類的創建者和使用者。類的創建者的職責是從頭創建一個類,提供給使用者接口就好,而類的使用者(書中稱之為客戶程序員)直接拿來接口使用,而不需要了解這個類具體是什么構造。同時類的創建者也不用有顧慮怕類被破壞或者修改。
4.方案的重復使用
我們知道在面向對象中一個類的對象可以置入另外一個類中,這叫做“創建一個成員對象”,在新建類的時候,首先可以考慮把不同類的對象組織起來使用,可以有效減少代碼的復雜度,減少不必要的繼承。
5.繼承的進一步解釋
在以前的認識中,繼承只是用來創建新類,和舊的類區別開來,書中對創建繼承的必要性進行了一定的探討:
- 為什么要使用繼承:要創建新的類和已有類功能相似,但是有一定的新功能,此時使用繼承,把舊的類所有的成員繼承到新類中,復制了舊類的接口
- 如何區分衍生類和舊類:a.為衍生的類增加新的函數,提供新的功能;b.改善基礎類的現有函數
6.關于類型的上溯
這個概念這次深刻的理解了。
舉例:
此時有一個這樣的類的構造:

同時有這樣的一個函數:
~~~
void doStuff(Shape s){
s.draw();
...
...
}
~~~
此時如果定義了新的形狀,則只需要指出該形狀的類衍生于Shape類即可調用Shape類的函數:
~~~
Circle c = new Circle();
Triangle t = new Triangle();
Square s = new Square();
doStuff(c);
doStuff(t);
doStuff(s);
~~~
這里把衍生的類當成了它的基礎類型處理,這種方法就叫做Upcasting,只需要指出某個類所屬的基本類型,即可讓它執行基礎類的具體功能。