一、有繼承關係的物件─應用多型(Applying polymorphism)
二、Object類別─覆蓋equals及hashCode方法
三、import的用法
四、存取修飾值 final 的用法
五、列舉常數值(enumation)
一、有繼承關係的物件─應用多型
目的:解決多載的缺點
♠寫一個程式測試"多型"
♦向上轉型upward
子 → 父
♠如果子類別增加一個方法,而我的副程式要實現所有類別中的方法時,會編譯錯誤!
♦在一個副程式裡,如何實現所有方法?
♦complier error
♠使用instanceof:判斷記憶體位址是屬於哪一個子類別
(instanceof 不是指令)
語法:物件參考變數 instanceof 類別
傳回值:布林值
♦判斷 e 是由哪一塊記憶體空間建立
接著把 e「向下轉型」操作myWork()
♠向下轉型(downward)錯誤的例子
♠Object類別中,getClass()為傳回物件變數是用哪一個類別建立的空間
♠Object類別中,clone()為複製類別
為何要覆蓋equals呢?
因為: 1.封裝
2.集合(set) 資料結構
目的:比較兩個物件中私有屬性變數數值是否一樣
如果覆蓋equals(),則一定要覆蓋「雜湊值」hashCode()。
♠覆蓋父類別的toString()、equals()與hashCode()
1.靜態方法or變數的import:import static 資料夾路徑.類別.方法or屬性
2.非靜態的import:import 資料夾路徑.類別
♠操作兩種方法
♦紅色的為靜態
藍色的為非靜態
四、存取修飾值 final 的用法
♠final 類別 → 不能被繼承
五、列舉常數值(enumation)
在日常生活中,項目固定、值固定,請用列舉。
列舉必須寫在類別內部,屬於內部類別。
語法: enum 列舉名稱{列舉常數值1,列舉常數值2,‧‧‧}
編譯器 會自動加上存取修飾值 public static final
內部類別(又稱巢狀類別Nested Classes)有四種:
1.非靜態(一般)
2.靜態
3.方法
4.匿名
♠列舉常數值的例子:星期
作業:
寫一個類別Student,有私有變數學號、姓名、國文成績、英文成績與數學成績
必須覆蓋父類別Object的toString()、equals() 與 hashCode()
主程式建立三個物件(tom,kan,ban),參數輸入直接用建構子方法
輸出去比較這三位學生的成績是否一樣,hashCode是否一樣
後記:
1.今天的課程當下無法完全吸收,回家後細細咀嚼了三遍,才慢慢消化完畢。
2.downward 判斷是否成功的準則為一開始建立的記憶體空間。
3.列舉常數值程式碼乾淨俐落,但背後隱藏的程式碼超級多,記憶體空間配置很複雜,也很消耗記憶體。
4.今天中午吃飯捲----起司豬排55元(未加大)
沒有留言:
張貼留言