2015年2月8日 星期日

JAVA7-課程9

        課程越來越複雜了!
        一、有繼承關係的物件─應用多型(Applying polymorphism)
        二、Object類別─覆蓋equals及hashCode方法
        三、import的用法
        四、存取修飾值 final 的用法
        五、列舉常數值(enumation)

一、有繼承關係的物件─應用多型
        目的:解決多載的缺點
        ♠寫一個程式測試"多型"




♦向上轉型upward
子 → 父

       ♠如果子類別增加一個方法,而我的副程式要實現所有類別中的方法時,會編譯錯誤!
♦在一個副程式裡,如何實現所有方法?
 ♦complier error
        
        ♠使用instanceof:判斷記憶體位址是屬於哪一個子類別
                                      (instanceof 不是指令)
                  語法:物件參考變數 instanceof 類別
                  傳回值:布林值
♦判斷 e 是由哪一塊記憶體空間建立
接著把 e「向下轉型」操作myWork()

        
       ♠向下轉型(downward)錯誤的例子

        
        ♠Object類別中,getClass()為傳回物件變數是用哪一個類別建立的空間


        ♠Object類別中,clone()為複製類別



二、Object類別─覆蓋equals及hashCode方法
        為何要覆蓋equals呢?
        因為: 1.封裝
                     2.集合(set) 資料結構
        目的:比較兩個物件中私有屬性變數數值是否一樣
       
        如果覆蓋equals(),則一定要覆蓋「雜湊值」hashCode()。
        ♠覆蓋父類別的toString()、equals()與hashCode()



三、import的用法
        1.靜態方法or變數的import:import static 資料夾路徑.類別.方法or屬性
        2.非靜態的import:import 資料夾路徑.類別
     
        ♠操作兩種方法
♦紅色的為靜態      
藍色的為非靜態


四、存取修飾值 final 的用法
        ♠final 類別 → 不能被繼承

     ♠final 方法 → 不能被覆蓋

       ♠final 變數 → 不能被修改值

五、列舉常數值(enumation)
        在日常生活中,項目固定、值固定,請用列舉。
        列舉必須寫在類別內部,屬於內部類別。
        語法: enum 列舉名稱{列舉常數值1,列舉常數值2,‧‧‧}
                     編譯器 會自動加上存取修飾值 public static final

        內部類別(又稱巢狀類別Nested Classes)有四種:
                1.非靜態(一般)
                2.靜態
                3.方法
                4.匿名

        ♠列舉常數值的例子:星期

         ♠反組譯回來後,發現javac加了很多程式碼

作業:
         寫一個類別Student,有私有變數學號、姓名、國文成績、英文成績與數學成績
         必須覆蓋父類別Object的toString()、equals() 與 hashCode()
         主程式建立三個物件(tom,kan,ban),參數輸入直接用建構子方法
         輸出去比較這三位學生的成績是否一樣,hashCode是否一樣



後記:
        1.今天的課程當下無法完全吸收,回家後細細咀嚼了三遍,才慢慢消化完畢。

        2.downward 判斷是否成功的準則為一開始建立的記憶體空間。

        3.列舉常數值程式碼乾淨俐落,但背後隱藏的程式碼超級多,記憶體空間配置很複雜,也很消耗記憶體。

        4.今天中午吃飯捲----起司豬排55元(未加大)





沒有留言:

張貼留言