1. 程式人生 > >第五章簡易筆記

第五章簡易筆記

程序 維護 技巧 創建 支持 枚舉 屬於 它的 自動

第五章-繼承


1. 繼承已存在的類就是復用(繼承)這些類的方法和域。在此基礎上,還可以添加一些新的方法和域,以滿足新的需求。
2.反射是指在程序運行期間發現更多的類及其屬性的能力。
3.在java中所有繼承都是公有繼承。
4. 在子類中可以增加域、增加方法或覆蓋超類的方法,然而絕對不能刪除繼承的任何域和方法。
5.this與super關鍵字用途總結:
this用途:
(1)引用隱式參數;
(2)調用該類其他的構造器。
super用途:
(1)調用超類方法;
(2)調用超類構造器。
6.調用構造器的語句只能作為另一個構造器的第一條語句出現。構造器參數既可以傳遞給本類(this)的其他構造器,也可以傳遞給超類(super)的構造器。
7.一個對象變量可以指示多種實例類型的現象被稱為多態,在運行時能夠自動的選擇調用哪個方法的現象稱為動態綁定。
8.java不支持多繼承。
9.在java中,對象變量是多態的。一個Employee變量既可以引用一個Employee類對象,也可以引用一個Employee類的任何一個子類對象。
10.不能將超類的引用賦給子類對象。例如:Manager m = staff[i];//error

原因:不是所有的雇員都是經理。

11. 動態綁定(弄清對象的執行過程):
1) 編譯器查看對象的聲明類型和方法名。編譯器將會一一列舉所有該類中的該方法和其超類中訪問屬性為public且方法名與之一致的方法。
2)變奇藝查看調用方法時提供的參數類型。如果存在一個方法名相同且所提供的參數類型完全匹配,就選擇這個方法,這個過程叫做重載解析。
12. 如果子類定義了一個與超類簽名相同的方法,那麽子類中的這個方法就覆蓋了超類中的這個相同簽名的方法。在覆蓋方法時,一定要保證返回類型的兼容性。允許子類將覆蓋方法的類型定義為原返回類型的子類。
13. 在覆蓋一個方法時,子類方法不能低於超類方法的可見性。如果超類方法時public,那麽子類方法一定要聲明為public。
14. 進行類型轉換的唯一原因:在暫時忽視對象的實際類型之後,使用對象的全部功能。
15. 在Java中,每個對象變量都屬於一個類型。類型描述了這個變量所引用的以及能夠引用的對象類型。
16. 將一個子類的引用賦值給一個超類變量,編譯器是允許的。但將一個超類的引用賦值給一個子類變量,必須進行類型轉換。這樣才能通過運行時檢查。
綜上:
1)只能在繼承層次內進行類型轉換。
2)在將超類轉換成子類型之前,應該使用instanceof進行檢查。在一般情況下,應該盡量少用類型轉化和instanceof運算符。
if(staff[1] instanceof Manager){
boss = (Manager) staff[1];
......
}
17. 包含一個或多個抽象方法的類必須聲明為抽象的。除此,抽象類還可以包含具體數據和具體方法。抽象方法充當著占位的角色,他們的具體實現在子類中。
18. 擴展抽象類的兩種方法:
1)在子類中定義部分抽象方法或抽象方法也不定義,這樣必須將子類也標記為抽象類;
2)定義全部的抽象方法,這樣,子類就不是抽象的了。
19. 類即使不含抽象方法,也可以將類聲明為抽象類。抽象類不能被實例化(不能創建它的對象,但可以定義一個抽象類的對象變量,但是它只能引用非抽象子類的對象)
20. Java用於控制可見性的四個訪問修飾符:
1) 僅對本類可見------private;
2) 對所有類可見 ------ public;
3) 對本包和所有子類可見 ------ protected;
4) 對本包可見 ------ 默認,不需要修飾符。
21. 可以使用Object類型的變量引用任何類型的對象。當然,Object類型的變量只能用於作為各種值的通用持有者。
22. 在Java中,只有基本類型(例如:數值、字符和布爾類型)不是對象。所有的數組類型,不管是對象數組還是基本類型的數組都擴展與Object類。
23. Object類中的equals方法用於檢測一個對象是否等於另外一個對象。在Object類中,這個方法將判斷兩個對象是否具有相同的引用。如果兩個對象具有相同的引用,他們一定是相等的。然而經常檢驗兩個對象狀態的相等性,如果兩個對象的狀態相等,就認為這兩個對象是相等的。
24. 強烈建議為自定義的每一個類增加toString方法。
25. 泛型數組列表:
ArrayList是一個采用類型參數的泛型類。為了指定參數列表保存的元素對象類型,需要用一對尖括號括起來加在後面。具有自動調節數組容量的功能,而不需為此編寫任何代碼。可以使用add方法將元素添加到數組列表中。
26. 數組列表的操作魅力: 如果調用add且內部數組已經滿了,數組列表就將自動地創建一個更大的數組,並將所有的對象從較小的數組中拷貝到較大的數組中。
27. 數組列表的容量與數組的大小有一個非常重要的區別:容量為100個元素的數組列表只是擁有保存100個元素的潛力,單數在最初甚至完成初始化構造後,數組列表根本就不含任何元素。
28. 對象包裝器類是不可變的,即一旦構造了包裝器,就不允許更改包裝在其中的值。同時,包裝器還是final的,不能定義他們的子類。
29. 如果想定義一個整型數組列表,而尖括號中的類型參數不允許是基本類型
30. 在比較兩個枚舉類型的值時,永遠不要使用equals,而是直接使用“==”就可以了。
31. 能夠分析類能力的程序稱為反射。反射機制的功能極其強大。反射機制可以用來:
1)在運行時分析類的能力。
2)在運行中查看對象,例如,編寫一個toString方法供所有類使用。
3)實現通用的數組操作代碼。
4)利用Method對象,這個對象很像C++中的函數指針。
32. 在程序運行期間,Java運行時系統始終為所有的對象維護一個被稱為運行時的類型標識。這個信息跟蹤著每一個對象所屬的類。虛擬機利用運行時類型信息選擇相應的方法執行。保存這個信息的類被稱為Class。
33. 繼承設計的技巧:
(1)將公有操作和域放在超類。
(2)不要使用受保護的域。
(3)使用繼承實現is-a 的關系。
(4)除非所有繼承的方法都有意義,否則不要使用繼承。
(5)在覆蓋方法時,不要改變預期行為。
(6)使用多態,而非類型信息。
(7)不要過多的使用反射。

第五章簡易筆記