1. 程式人生 > >20172332 2017-2018-2 《程序設計與數據結構》第七周學習總結

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

protect 裏的 gin following 都是 head 模式 -s 博客

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

教材學習內容總結

第九章繼承

  • 1.創建子類。
    • 子類與父類的關系。子類是父類的其中一種。
    • 派生操作在子類中加保留字extends實現。
    • 子類的實例化並不依賴於父類的實例化。
  • 2.protected修飾符。(為了讓子類能夠訪問並且不違反封裝性原則)
    • 父類中的變量和方法被聲明為protected可見性時,子類就可以使用。
    • UML圖中,protected成員前加#。
    • 父類的構造方法,子類不能繼承(除非用super引用)。
  • 3.super引用。
    • super引用可以調用父類的構造方法。
    • super引用調用父類構造方法的操作只能在子類中執行,並且必須是在第一行執行。
  • 4.多繼承。
    • 單繼承:子類只能有唯一的父類。
    • java語言的設計者明確決定不支持多繼承,以防出現父類的方法同名的情況。
    • 作為替代多繼承的方法,依賴接口。一個java類只能由一個父類派生,但可以實現多個接口。
  • 5.子類和父類有相同的方法名和簽名時,子類方法將重寫父類方法,子類方法優先。
    • 子類不能重寫final方法。
  • 6.影子變量。
    • 子類父類變量名可以同名,這種定義是合法的,但是不提倡。
  • 7.類層次結構。
    • 從一個父類派生出的子類,還可以是它自己子類的父類。
    • 多個子類可以從一個父類派生。
    • 子類個數和類層次數都沒有限制。
    • 同一個父類的兩個子類,稱為同胞。兩者沒有繼承關系。(可以理解為同胞兄弟,hhh。)
    • 公共特征保持在盡可能高的類層次級上。
    • 繼承機制具有傳遞性。有可能子類的特性不是來自於父類,而是來自於父類的父類或者,父類的父類的父類等等。(也就是祖先類。)
    • 情況不同,最佳的類層次結構不同,類層次結構不是一成不變的。
  • 8.Object類。
    • Java中所有的類歸根結底都由Object類派生,如果沒有extends,則默認從Object類派生。
    • Java成粗的每一個類都繼承toString方法和equals方法。
  • 9.抽象類和抽象方法。
    • 抽象類通常含一個或多個尚未定義的抽象方法,不能被實例化。
    • 抽象類與接口的不同是:①抽象類可以含有非抽象方法。②除了常量之外還可以聲明數據。
    • abstract
      修飾符將一個類聲明為抽象類。
    • 抽象類在類層次結構中充當占位符。
    • 抽象類中的每一個抽象方法都必須使用abstract修飾符,但抽象類不必一定包括抽象方法。
    • 在UML類圖中,抽象類的類名用斜體表示。
    • 抽象類在類層次上的定義位置不受限制,但一般在較高的類層次上。(存在從非抽象父類派生出抽象類的可能)
    • 由抽象類派生的子類必須重寫所有父類的抽象方法,否則該子類仍未抽象方法。
    • 抽象方法不使用finalstatic修飾符。
  • 10.接口層次結構。
    • UML類圖中,用空心箭頭線表示接口之間的繼承關系。
    • 父接口用於派生子接口時,子接口繼承了父接口的所有抽象方法和常量,任何實現子接口的類都必須實現所有的抽象方法。
    • 接口間的繼承問題不存在可見性問題,因為一個接口的所有成員都是公共的。
    • 接口不能用於派生新類,類不能用於派生接口。(接口只能實現)。
  • 11.可見性。
    • 在子類中,即使不能直接引用父類成員,但是父類成員也總是存在的,可以被間接地引用。
  • 12.類間繼承關系的設計。
    • 繼承關系小結。
    • final修飾符可用於限制繼承。
    • final修飾符可用於方法也可用於類。(方法不能在任何派生類中重寫,類不能成為其他類的父類。)

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

  • 問題1:三種可見性修飾符的可見性比較
  • 問題1解決方案:private可見性最嚴格,public可見性最弱,protected可見性位於兩者之間。
  • 問題2:super.message();super(message);的不同
  • 問題2解決方案:super.message()是調用父類的方法並且這裏的message是方法名,super(message)是調用父類的構造方法並且這裏的message是形參名。
  • 問題3:書中所說的抽象類通常含一個或多個尚未定義(沒有實現代碼)的抽象方法抽象類不必一定包含抽象方法是否相矛盾。
  • 問題3解決方案:不矛盾。詳情見Java中,抽象類可以不含抽象方法嗎

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

  • 問題1:出現紅線的原因

    技術分享圖片

  • 問題1解決方案:該類是子類,如果子類創建構造方法的話,那麽需要用super語句把父類的構建方法也輸入,(主要是把父類的對象也初始化),否則會有錯誤。並且一定要註意,super語句要放在第一行。

代碼托管

技術分享圖片

上周考試錯題總結

1.The "off-by-one" error associated with arrays arises because

  • A . the first array index is 0 and programmers may start at index 1, or may use a loop that goes one index too far
  • B . the last array index is at length + 1 and loops may only iterate to length, missing one
  • C . the last array element ends at length - 1 and loops may go one too far
  • D . programmers write a loop that goes from 0 to length - 1 whereas the array actually goes from 1 to length
  • E . none of the above, the "off-by-one" error has nothing to do with arrays
  • 答案:A ;我選的:D
  • 分析:數組的合法索引為0到X- 1,差一錯誤,因為程序員將編寫代碼來嘗試訪問索引1到X
  • 單詞:1.array:數組。2.iterate:重復。3.element:元素。4.whereas:然而。

2.If an int array is passed as a parameter to a method, which of the following would adequately define the parameter list for the method header?

  • A . (int[ ])
  • B . (int a[ ])
  • C . (int[ ] a)
  • D . (int a)
  • E . (a[ ])
  • 答案:C ;我選的:E
  • 分析:這題意思是定義一個整型值數組,應該怎麽聲明。所以選C。
  • 單詞:1.parameter:參數。

3.Given the following declarations, which of the following variables are arrays?

int[ ] a, b; int c, d[ ];

  • A . a
  • B . a and b
  • C . a and d
  • D . a, b and d
  • E . a, b, c and d
  • 答案:D ; 我選的:C
  • 分析:聲明方式有四種模式:①int[] a,b ②int[] a ③int d[] ④int c,d[]
  • 單詞:無

4.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 a
  • 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
  • 答案:A ;我選的:B
  • 分析:“=”是賦值運算符。分兩種情況:①a和b如果是兩個變量,則把右邊變量的值賦給左邊變量。②a和b如果是兩個數組,導致a和b都在存儲器中引用相同的數組,因此它們現在是彼此的別名。
  • 單詞:1.alias:別名。2.corresponding:對應的。

5.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
  • 答案:B ;我選的:A
  • 分析:數組是對象,因此它們是從Object類繼承的。Object類有一個toString方法。但是,Object類的toString方法不返回存儲在對象中的值,而是返回引用變量的值。因此,數組上使用的toString將不會返回數組中存儲的值,而是返回一個無意義的字符集。(Object類在第九章的繼承中有提到。)
  • 單詞:1.insert:插入。

6.So long as one is only accessing the elements of an ArrayList, its efficiency is about the same as that of an array. It‘s only when one begins to insert or remove elements towards the front portion of an ArrayList that its efficiency deteriorates.

  • A . true
  • B . false
  • 答案:A ;我選的:B
  • 分析:只要一個只訪問數組的元素,效率就與數組相同。但是,當對數組列表的前面部分進行插入或刪除時,也就是當大量元素復制必須發生時,降低其效率。
  • 單詞:1.the front portion of an ArrayList:數組列表的前部。

點評模板:

  • 博客中值得學習的或問題:

  • 代碼中值得學習的或問題:

點評過的同學博客和代碼

  • 本周結對學習情況
    • 20172326
    • 結對學習內容
      • 第九章繼承
  • 上周博客互評情況
    • 20172326

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

  • 本周的pp作業是要求畫UML類圖,這是第一次畫UML類圖,紀念一下第一幅UML類圖(雖然看起來很簡單!)
    技術分享圖片

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 182/182 1/1 10/10
第二周 458/640 1/2 15/25
第三周 469/1109 2/4 18/43 學會IDEA的使用和調試,學會jdb調試。
第四周 1536/2645 1/5 24/67
第五周 980/3625 1/6 25/92
第六周 870/4495 1/7 16/108
第七周 247/4742 1/8 14/122
  • 計劃學習時間:20小時

  • 實際學習時間:14小時

  • 改進情況:這周還有一個實驗,此博客交時,還沒有開始學習實驗三實驗四與實驗五,因此博客篇中並沒有算實驗的博客,學習時間也沒有加學習實驗的時間。因為本周的繼承,不難理解,並且沒有很多的代碼需要敲。所以花費的時間較少,代碼的增加量也較少。

參考資料

  • 《Java程序設計與數據結構教程(第八版)》

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