20172303 2017-2018-2 《程序設計與數據結構》第7周學習總結

20172303 2017-2018-2 《程序設計與數據結構》第7周學習總結

教材學習內容總結

1.繼承

  • 繼承的過程是在兩個類之間創建一種「是」的關係,即子類是一種更具體的父類版本。
  • 父類用於派生新類,又稱爲超類或基類。被派生出來的類稱爲子類或亞類。
  • Java中使用extends進行派生
    • 格式:public class 子類 extends 父類{}
  • 繼承具備單向性。
  • 在UML類圖中,由子類指向父類的空心箭頭表明繼承關係。
  • final修飾符可用於限制繼承的能力。
  • protect修飾符
    • protect修飾符的做用是既能保證子類能夠引用父類的方法或變量,又能保證父類的封裝性。
    • 格式:protect int num1;
    • 在UML圖中,pritect成員前加#來表示protect可見性
  • super引用
    • 因爲構造函數不能繼承,當子類想要引用父類的構造方法時,就須要super引用。
    • 格式:
      • 引用構造函數:super(變量)
      • 引用方法/實例數據:super.方法/實例數據
  • 有些對象語言容許子類有多個父類,這種狀況成爲多繼承。

2.重寫方法

  • 當子類和父類的方法名出現相同狀況時,子類將重寫父類的方法。但子類不能重寫final方法。

3.類層次結構

  • 一個子類能夠是一個或多個其餘類的父類,從而能夠創建起類層次結構。繼承機制具備傳遞性。
  • Object類
    • 全部java類都直接或間接地由Object類派生,能夠說,Object類是全部類的父類。
    • 其中最經常使用的兩個方法是toString方法和equals方法,常常被子類重寫。
  • 抽象類
    • 抽象類不能被實例化,在類層次結構中充當佔位符。
    • 可用abstract修飾符將一個類聲明爲抽象類。
    • 在UML類圖中,用斜體表示抽象類。
    • 不能對一個抽象方法使用final或者static修飾符。
    • 抽象類沒必要必定包含抽象方法。

教材學習中的問題和解決過程

  • 問題1:Words/Book/Dictionary類和Words2/Book2/Dictionary2類的區別?
  • 問題1解決方案:兩個實現的功能是同樣的,因此剛開始不是很明白爲何要用兩種不一樣的代碼。從新把兩個對着看了一遍,首先兩邊的main驅動類是沒有差異的,Book類中頁數是直接定義了pages變量的值,而Book2類中是經過一個構造方法來設計pages變量的值。因此Dictionary類中直接引用父類就能夠了,而Dictionary2類要經過super引用來引用父類的構造方法。
  • 問題2:Java修飾符的類型和區別?
  • 問題2解決方案:主要分爲可見性和非可見性修飾符(又稱訪問修飾符和非訪問修飾符)
    • 可見性修飾符分爲四種:
      • public:被聲明爲 public 的類、方法、構造方法和接口可以被任何其餘類訪問。因爲類的繼承性,類全部的公有方法和變量都能被其子類繼承。
      • private:私有訪問修飾符是最嚴格的訪問級別,因此被聲明爲 private 的方法、變量和構造方法只能被所屬類訪問,而且類和接口不能聲明爲 private。
      • protected:當父類和子類在同一個包中時,被聲明爲 protected 的變量、方法能被同一個包中的任何其餘類訪問;當父類和子類不在同一個包中時,子類實例能夠訪問其從父類繼承而來的 protected 方法,而不能訪問父類實例的protected方法。
      • default:在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
    • 非可見性修飾符已學的有三種:
      • static:用於聲明靜態變量或靜態方法。
      • final:final 變量能被顯式地初始化而且只能初始化一次。類中的 final 方法能夠被子類繼承,可是不能被子類修改。
      • abstract:抽象類不能用來實例化對象,聲明抽象類的惟一目的是爲了未來對該類進行擴充
  • 問題3:不是很能理解P299的「每一次的派生都應該具備一種‘是’關係,子類是一種更具體的父類版本。」的含義。
  • 問題3解決方法:詢問了於欣月同窗,她舉了一個很是形象的例子,好比說有一個馬類和一個哺乳動物類,你能夠很明確地說出「馬是哺乳動物」這樣一種「是」的關係,因此能夠說哺乳動物類是馬類的父類。

代碼調試中的問題和解決過程

  • 問題1:作PP9.1時輸出結果一直是一個結果
  • 問題1解決方案:再次詢問了於欣月同窗,把MonetaryCoin a = new MonetaryCoin();放到了while循環中。
    修改前:

    修改後:

    修改後正確運行結果:

    緣由見下圖:

代碼託管

  • 本週代碼量出現問題(╥╯^╰╥)週一去找王老師看了一下,老師說腳本之類的都沒問題,應該是有什麼文件丟失了,不影響課程進度的話就不用管了,就按着如今的代碼量往上增吧

上週考試錯題總結(正確爲綠色,錯誤爲紅色)

  • 錯題1:If a and b are both int arrays, then a = b; will
    • A . create an alias
    • B . copy all elements of b into a
    • C . copy the 0th element of b into the 0th element of
    • D . return true if each corresponding element of b is equal to each corresponding element of a (that is, a[0] is equal to b[0], a[1] is equal to b[1] and so forth) and return false otherwise
    • E . return true if a and b are aliases and return false otherwise
  • 緣由及理解狀況:作的時候沒有搞清楚"alias"的意思,以後查了才反應過來是別名,當時以爲「=」是用來賦值的,a = b應該就是把b賦值給a,但因爲a和b是數組,因此他們如今引用同一個數組,成了相互的別名。
  • 錯題2:Arrays have a built in toString method that returns all of the elements in the array as one String with "\n" inserted between each element.
    • A . true
    • B . false
  • 緣由及理解狀況:剛開始看解析不理解爲何數組從Object類繼承,看了第九章知道了由於它是全部類的父類。Object類有一個toString方法。可是,Object的toString方法不返回存儲在Object中的值,而是返回參考變量的值。因此,在數組上使用的toString不會返回數組中存儲的值,而是返回一組沒有意義的字符。
  • 錯題3A Java main method uses the parameter (String[ ] variable) so that a user can run the program and supply "command-line" parameters. Since the parameter is a String array, however, the user does not have to supply any parameters.
    • A . true
    • B . false
  • 緣由及理解狀況:main方法須要提供參數。例如老師上課舉得一個例子:

結對及互評

點評模板:

  • 博客中值得學習的或問題:
    • 優勢:教材內容學習相比上週有改進,感受開始認真看教材了。適當的一些表情確實能增長博客的可讀性。
    • 問題:張昊然同窗說本身本週問題很少,但我以爲是否有多是在看教材時仍是不夠深刻,沒有多考慮一些問題,只是泛泛地把課本看過去了。
  • 代碼中值得學習的或問題:
    • 優勢:在本週有實驗課後把代碼分開文件夾放,更加簡潔整齊,是我應該學習的。
    • 問題:commit提交能夠再簡潔而且具體一些。

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20172322
    • 結對學習內容
      • 張昊然同窗教會了我如何畫UML類圖並幫助我完成了實驗2的節點四。
      • 討論PP9.1,兩人都出現了最後輸出結果不變的問題,最後經過詢問別組的於欣月同窗解決的。

其餘(感悟、思考等,可選)

  • 這周的內容相比前幾周要簡單許多,感受能稍微放鬆一點點。這周在寫博客的時候最大的感觸就是你學的東西多了,就有不少能夠類比總結的概念,就像初高中歷史老師按時間順序講完知識後,會在期末時按不一樣的專題進行講解,這樣就能綜合一學期所學的所有內容。我但願在接下來的每一次博客中我都能總結點什麼東西。
  • 教材複習狀況
    • 複習進度(頁數):71/310
    • 重要成長:
      • 複習了四種整形和兩種浮點型。Java中默認全部整型值爲int型,最後加L或l纔是long型。
      • 複習了ASCII碼和Unicode碼的差異。
      • 以前一直不知道怎麼寫的布爾變量類會寫了(〃'▽'〃)
      • 在P56的Scanner類方法中找到了以前一直搞不清hasNext方法是幹嗎的
    • 感想:這周複習的頁數不是不少,但感受收穫很大,以爲java的知識體系漸漸清晰了。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 120/120 1/1 9/9
第二週 246/366 1/2 9/18
第三週 785/1121 2/4 15/33
第四周 615/1736 1/5 20/53
第五週 1409/2645 1/6 24/77
第六週 561/3206 1/7 20/97 再次搞清了一些本身有點含糊不清的概念
第七週 63/3269 1/8 15/112
  • 計劃學習時間:15小時
  • 實際學習時間:15小時
  • 改進狀況:本週學習內容不是很難,再加上其餘科目事情比較多,分給java的時間可能有點少,下週會改進。

參考資料

相關文章
相關標籤/搜索