20145301第四周學習總結


20145301第四周學習總結

教材學習內容總結

第六章

6.1 何謂繼承

  • 何謂繼承 面向對象中,子類繼承父類,避免重復的行為定義,不過並非為了避免重復定義行為就使用繼承,濫用繼承而導致程序維護上的問題時有所聞。如何正確判斷使用繼承的時機,以及繼承之后如何活用多態,是學習繼承時的重點。:

  • 通過extends繼承的父類可以是不加abstract關鍵字的普通類,也可以是加了abstract關鍵字的抽象類。繼承普通類時可以覆寫父類的方法,或者創建自己獨有的方法,或者這兩者都不使用。繼承抽象類時,必須覆寫抽象類中的全部抽象方法

public class SwordsMan extends Role{
private int level;     // 角色等級
private String name;   // 角色名稱
private int blood;     // 角色血量
public void fight() {
   System.out.println("揮劍攻擊");
}
public int getBlood() {
   return blood;
}
public void setBlood(int blood) {
   this.blood = blood;
}
public int getLevel() {
   return level;
}
public void setLevel(int level) {
   this.level = level;
}
public String getName() {
   return name;
}
public void setName(String name) {
   this.name = name;
}
  • implements繼承的父類是且必須是一個interface定義的接口類,且接口中不能定義方法體,只能擁有私有變量和方法名。子類必須實現所有接口中的方法

  • 如果一個方法中含有與成員變量同名的局部變量,則方法中對該變量的訪問以局部變量進行訪問,也就是說,方法體中的局部變量覆蓋了成員變量。如果要在該范圍內訪問成員變量,就必須使用this關鍵字

  • 不能在靜態上下文和靜態代碼塊中使用this關鍵字,編譯器不允許這么做。

  • 子類可以重寫父類的方法,或者說可以覆蓋父類的方法,只要在子類中定義與父類相同的方法就可以了。但是,方法的聲明一定要和父類的方法聲明一樣

  • 可以使用super關鍵字應用父類的方法,然后再添加新的業務代碼。

6.2繼承語法細節

  • protected 被聲明為 protected 的成員,相同包中的類可以直接存取,不同包中的類可以在繼承后的子類直接存取;Java中,有3個權限關鍵字,但實際上有4個權限范圍,因為沒有定義權限關鍵字,默認就是包范圍。

  • 重新定義的細節 要注意,對於父類中的方法權限,只能擴大但不能縮小(即若原來成員為 public,則子類中重新定義時不可為 private 或 protected);在 Java中,如果想取得父類中的方法定義。可以在調用方法前,加上 super 關鍵字; static 方法屬於類擁有,如果子類中定義了相同簽署的 static 成員,該成員屬於子類所有,而非重新定義, static 方法也沒有多態。

  • 對象類型轉換和多態

   1.多態:同一個實體同時具有多種形式,這樣可以提高代碼的可重用性

  2.對象類型轉換分為向上轉型和向下轉型

  向上轉型:子類的對象被看做父類的對象來使用

  這樣的類型轉換是安全的,但會丟失子類中新定義的那些信息

  向下轉型:父類的對象被看做子類的對象來使用(需要使用強制轉換)

  這種類型轉換時不安全的,有可能造成信息的缺失

  3.Java中通過覆寫機制可以在繼承關系的若干類中定義方法名、參數表、返回值相同但方法體不同的方法,在程序運行時,根據所引用對象的類型來判斷執行哪個方法,這稱為動態綁定(即運行時確定執行哪個方法)

  • 關鍵詞final

    1.final可以用於修飾變量、方法和類,表示被修飾的東西只能做一次初始化,之后不能發生改變

     當final修飾方法參變量時,表示方法中不會對參變量的值做修改

     final修飾的靜態成員變量必須在聲明時或在靜態初始化塊中初始化

     final修飾的方法在繼承過程中不能被覆寫   

     final修飾的類不能被其他類繼承

   2.final類沒有子類,final類的成員方法不會被覆寫,final類的成員變量卻不一定是常變量象。

  • 關於垃圾收集 JVM 有垃圾收集(GC)機制,執行流程(目前我們只接觸過 main()程序進入點開始之后的主流程)中,無法通過變量參考的對象(就是沒有牌子的對象),就是 GC 認定的垃圾對象。數。

第七章

7.1 何謂接口

  1. 定義形式:interface interfaceName {…}

    成員方法默認為抽象的、公有的,成員屬性默認為靜態的、final修飾的

    接口只是提供一種形式,具體的實現細節交由它的類完成

    由於接口不涉及具體的實現,因此在接口中的成員變量是靜態常變量,默認為static和final修飾

  2. 類實現一個接口:class MyClass implements A, B, C {…}

    一個類可以實現多各個接口

    注意:雖然在接口中沒有顯式聲明方法是公有的,但接口中默認的訪問控制是公有的,而類中默認的訪問控制是包內友好,所以必須在類中將這個方法用public修飾

  3. 接口和抽象類的選擇:

    Java中類之間不支持多繼承,但類可以實現多個接口

    若類需要包含一些方法的實現,必須實現為抽象類,其他情況兩者皆可,優先選擇使用接口,使程序更加易於擴展

7.2 接口語法細節

  • 使用interface來定義抽象的行為外觀,方法要聲明為public abstract,無須且不能有操作。為了方便,也可以省略public abstract,編譯程序會協助補齊。可以使用接口枚舉常數,只能定義為public static final。為了方便,也可以省略public static final。
  • 接口可以繼承別的接口,也可以同時繼承兩個以上的接口,也是使用extends關鍵字。
  • enum語法可用於定義枚舉常數,enum實際上定義了類,而enum中列舉的常數實際上是public static final,無法撰寫程序直接實例化枚舉類型,因為構造函數權限設定為private,只有類中才可以實例化。

問題和解決過程

問題

不清楚覆蓋和重載。

解決過程

在博客園上找到高手之見,特推薦:

重載和覆蓋的區別:

  • 重載發生在同一個類之中,重載要求函數名相同,參數不同(參數個數||參數類型||參數順序)。特別的函數的返回類型不影響重載。

  1、覆蓋的方法的標志必須要和被覆蓋的方法的標志完全匹配,才能達到覆蓋的效果; 
  2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致; 
  3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;  
  4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。

  • 覆蓋發生在父子類之間,覆蓋同樣要求函數名相同,並且參數也相同。覆蓋遵循“兩同兩小一大”的原則。 兩同是即是函數名和參數是相同的;兩小是拋出的異常更小或相同,返回類型更小或相同;一大是訪問權限更大或相同。 構造函數和靜態方法支持重載,但是不可以被覆蓋。(構造方法和static的相似性,也可以聯系到private和final關鍵字也有此相似性)

  1、在使用重載時只能通過不同的參數樣式。例如,不同的參數類型,不同的參數個數,不同的參數順序(當然,同一方法內的幾個參數類型必須不一樣,例如可以是fun(int, float), 但是不能為fun(int, int));  
  2、不能通過訪問權限、返回類型、拋出的異常進行重載;  
  3、方法的異常類型和數目不會對重載造成影響;

其他

  • 抽象類和接口的區別:  
    在設計理念上,一個類只能繼承一個抽象類,但是可以實現多個接口。  
    抽象類可以含有普通成員變量和非抽象的方法,而接口的成員變量和方法都有固定的修飾。即:public static final 和 public abstract。對於繼承者來說,抽象類的方法子類可以不全部復寫,但是接口的方法抽象類是必須全部復寫的。  
    抽象類也可以implements接口,可以實現接口中的方法,也可以不實現。抽象類不可以被final修飾。抽象類可以包含非抽象方法。

    心得體會

      這周感覺學習比較吃力,抽象的東西越來越多,理解上難度也逐漸增加。如:對象、封裝等概念,即使讀了,也不能完全理解。也不能再吃C語言的老本,需要我投入更多的時間和精力,我需要更多的去展開去學習,不能僅僅局限在看書,碼代碼上,不懂的地方,我會先碼着碼,好先留存着問題,去與同學進行交流。我發現博客園的學習不應僅僅局限於dky的小圈子,我們可以抽些時間,看看其他高手的博客進行學習,會對我們的學習很有幫助。

學習進度條

目標  代碼行數  博客量 學習時間 重要成長
目標 4000行 30篇 400小時 ----
第一周  100/4000  2/30 15/400 hello java
第二周 350/4000 3/30 40/400 流程控制
第三周 500/4000 4/30 50/400 類與對象、封裝
第四周 700/4000 5/30 50/400 繼承、接口

參考資料

    • 《Java學習筆記》
    • 《Java學習筆記》學習指導
    • 畢向東java教學


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM