學號20172328《程序設計與數據結構》第八週學習總結
教材學習內容總結
- 1.綁定:在程序執行的某個時刻可能會產生一個請求事件,要求執行某段代碼來完成一個方法調用,這種請求事件稱爲一個方法調用與一個方法定義的綁定。
- 後綁定:對於多態性引用,這種綁定延遲到程序運行時才能執行,而且要綁定的方法取決於編譯階段。對於多態性引用,這種綁定要延遲到程序運行時才能執行,而且要綁定的方法取決於當時引用變量所引用的對象。這一被延遲的請求事件被稱爲後綁定或動態綁定。
- 2.多態性引用可以隨時間變化指向不一樣類型的對象。對於多態性引用,方法調用與方法定義代碼的綁定在運行時執行。
- 在Java中,能夠用兩種方式創建起多態性引用:
繼承方式
和接口方式
。
- 3.利用繼承實現多態性:
- 當用類名聲明瞭一個引用變量時,這個變量能夠指向該類的任何一個對象,也能夠引用經過繼承與它所聲明的類型有關的任何類的對象。
- 而且這種關係對整個類層次結構都有效。例如:
Animal creature = new Horse
(Animal是Mammel的父類,Horse是Mammel的子類)
- 4.利用接口實現多態性:
- 類名能夠用於聲明對象引用變量,接口名也能夠用於作聲明對象引用變量的類型。
- 一個接口引用變量能夠指向任何實現該接口類的對象。
- Please Remember:當使用接口引用變量時,只能調用在定義在接口中的方法,即便接口引用變量所指向的對象還有一些其餘可用方法也不可以實現調用。
- 接口名能夠用做方法參數,使得任何一種實現同一接口的類對象均可以做爲參數傳給方法。 方法的參數可使多態性的,使得方法所接收的參數具備靈活性。
- 5.排序:排序是將一組元素調整爲有序排列的過程。
- 選擇排序法:先去檢索全部元素,找最小和第一個換位置,繼續找二小與第二元素換位置~~~而後就排成了從小到大遞增有序數列。同理也能夠排出從大到小遞減數列。
int min;
Comparable temp;
for(int index = 0;index < list.length-1 ; index ++)
{
min = index;
for(int scan = index + 1; scan < list.length ; scan ++)
if(list[scan].compareTo(list[min])<0)
min = scan ;
temp = list[min];
list[min] = list[index];
list[index] = temp;
}
- 插入法排序:先對數列的前兩個元素進行排序,而後在插入第三個元素而後排序·······而後就排成了從小到大遞增有序數列。同理也能夠排成從大到小遞減數列。
for(int index = 1;index < list.length;index++)
{
Comparable key = list[index];
int position = index;
while(position > 0 && key.compareTo(list[position-1]) < 0)
{
list[position] = list[position -1];
position--;
}
list[position] = key;
}
- 兩種排序算法的比較
效率是比較排序算法的基本標準。選擇插入法和插入排序法實際上有相同的效率。兩種算法大約都執行n²次比較操做(其中n是數列中值的個數)。選擇排序法容易理解,大多數狀況下能一次性準確的移動到本身的位置,因此選擇排序法優於插入排序法。
教材學習中的問題和解決過程
- 問題1:對象?引用變量??對象引用變量???
- 1.(〃'▽'〃)本題解答:當時在看書過程當中一直弄不清這都是些什麼。迷迷糊糊、稀裏糊塗看完兩遍書都不怎麼明白。而後只能去尋找一下詳細解釋。
Vehicle veh1;
veh1 = new Vehicle();
效果是同樣的。這樣寫,就比較清楚了,有兩個實體:一是對象引用變量,一是對象自己。html
在堆空間裏建立的實體,與在數據段以及棧空間裏建立的實體不一樣。儘管它們也是確確實實存在的實體,可是,咱們看不見,也摸不着。不只如此,
咱們仔細研究一下第二句,找找剛建立的對象叫什麼名字?有人說,它叫「Vehicle」。不對,「Vehicle」是類(對象的建立模板)的名字。
想看詳細的,戳這裏java
- 問題2:接口能夠實現接口嗎?接口能夠繼承接口嗎?這二者有什麼關係?
- 2.(〃'▽'〃)本題解答:經過小組討論,獲得問題的解決,也去網上搜索了。
-
接口能夠繼承接口,而且能夠繼承不僅一個接口,可是不能實現接口。由於接口的成員方法都具備抽象屬性,不具備方法體,沒法實現繼承的接口。git
- 我本身的理解:接口是常量和抽象方法的集合體。實現接口是指將接口中的抽象方法具體化,繼承接口是指將接口中的方法繼承下來但不具體化。所以,接口不能實現接口而接口能夠繼承接口。
- 問題3:課本中SR10.5的答案不能理解。設MusicPlayer類是CDPlayer類的父類,判斷下列語句是否合法。
MusicPlayer mplayer = new MusicPlayer();
CDplayer cdplayer = new CDPlayer();
mplayer = cdplayer;
答案是:第三條語句不合法,一個MusicPlayer不必定就是CDPlayer。沒有++先用cast進行類型轉換++就直接賦值是不合法的。程序員
- 3.(〃'▽'〃)本題解答:子類繼承父類是對父類所提供的服務接口的一個擴展,也就是說 父類提供的接口是子類所提供接口的一個子集,因此說單純的父類對象時沒法轉型某個子類對象的。
java對象類型轉換
- 問題4:對課本上SR10.11的c、d問題不理解。(題目太長很差發揮,書本322頁你想了解的話去看一下嘍ヾ(◍°∇°◍)ノ゙)
4.(〃'▽'〃)本題解答:接口的引用變量能夠被實現接口對象賦值,至關於將地址賦給它。
❀拓展:繼承中也能夠將繼承父類的兩個子類的對象相互賦值,其實質也是改變對象地址。算法
代碼調試中的問題和解決過程
- 問題1:在作pp10.1時就遇到了卡殼的地方,我建立了一個payable接口,而後不知道給接口裏面放什麼方法,思索良久後本身編了一個不帶返回值的payable抽象方法,可是不能成功而且也沒法輸出具體的有效的東西。
- 1.(〃'▽'〃)本題解答:我仍是詢問了同窗,將Payable接口中的方法直接改爲了payday(),而後就可以輸出了。再加思索,我以爲是由於繼承接口後要去實現它才能夠,本身的問題原來是出如今這裏。其實很簡單的事情。
問題2:開始作pp10.5,參考了同窗們的博客,但本身仍是沒有明晰的思路。看到侯澤陽同窗將DVDCollection對象改爲了DVD數組對象,以爲很是聰明,本身終於理解了,一步一步改後,而後!!!!!bug華麗登場。
編程
2.(〃'▽'〃)本題解答:今天經過曉海同窗的認真講解成功找到了問題所在,應用這個類也須要Comparable接口,要實現Comparable接口就要提供compareTo方法的定義(實現代碼)。書上的Contact類就是很好的例子。而後我直接用了剛改寫的成爲遞減的Sorting類中插入排序法進行方法調用,而後用for-each遍歷出數組。而後我就又用選擇排序法試了試,而後發現都是能夠的。給你貼圖看!吶!這件事讓我學到,不會的話寫博客貼出來,說不定好心人就幫你解決了呢!還有就是,看書要仔細要仔細要仔細。
數組
第一次用IDEA進行代碼量統計哦
(statistics.sh腳本的運行結果截圖)
數據結構
上週考試錯題總結
- 問題1: If a programmer writes a class wanting it to be extended by another programmer, then this programmer must(若是一個程序員寫了一個類,這個類想要被其餘程序員拓展,那麼這個程序員應該?)
A . change private methods and instance data to be protected(將私有方法和示例數據改成protected型)
B . change public methods and instance data to be protected(把公有方法示例數據改成protected型)
C . change all methods to be protected(改變全部的方法爲protected型)
D . change the class to be protected(將類改變爲protected型)
E . none of the above, the programmer does not have to change anything(上述沒有正確答案,這個程序員不須要改變任何)
- 問題1分析和領悟:正確答案A。我當時選擇E。聲明爲protected的部分能夠由定義它們的類的任何子類訪問,而聲明爲private的部分不能被任何其餘類訪問。所以,之前定義的private項必須受到保護。之前定義的public項應該保持,以便全部其餘類仍然能夠訪問這些public項。之前定義的private不該該公開,由於這將容許全部類訪問它們,而不只僅是子類。
- 問題2:Which of the following is true regarding Java classes?(關於java類,下面哪個是正確的?)
A . All classes must have 1 parent but may have any number of children (derived or extended) classes(全部的類都必須有一個父類可是能夠有無限的子類)
B . All classes must have 1 child (derived or extended) class but may have any number of parent classes(全部的類都必須有一個子類,但能夠有無限的父類)
C . All classes must have 1 parent class and may have a single child (derived or extended) class(全部的類都必須有一個父類和一個子類)
D . All classes can have any number (0 or more) of parent classes and any number of children (derived or extended) classes(全部的類能夠有任何數量的父類和子類)
E . All classes can have either 0 or 1 parent class and any number of children (derived or extended) classes(全部類都有1個或者0個父類和無限多的子類)
- 問題2分析和領悟:正確答案選A,我當時選擇E。老師在課堂上強調的時候纔對這個問題有了更深入的瞭解。object類是全部類的父類,也就是說,全部的類都是object類派生出來的。所以答案選A。
- 問題3:A variable declared to be of one class can later reference an extended class of that class. This variable is known as(一個被聲明爲一個可變類的變量能夠引用該類的擴展類。這個變量被稱爲)
A . protected
B . derivable
C . cloneable
D . polymorphic
E . none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class
- 問題3分析和領悟:正確答案選D,我當時選擇的是A。,當時還沒學到多態,看到繼承一章的關鍵詞protected就果斷下手了。其實多態表示變量能夠有多種形式存在。在通常狀況下,Java被強制定義爲,一個變量,一旦聲明爲某種類型,就永遠不能改變其爲不一樣的類型。惟一的例外是多態變量能夠是任何類型的派生類(儘管不是在同一時間,變量也能夠從一種類型轉換爲另外一種類型)。
- 問題4: Using the reserved word, super, one can(用保留字super,可以)
A . access a parent class'constructor(s)(訪問父類構造函數)
B . access a parent class'methods and instance data(訪問父類方法和實例數據)
C . access a child class'constructor(s)(訪問子類構造函數)
D . access a child class'methods and instance data(訪問子類方法和實例數據)
E . none of the above(沒有正確選項)
- 問題4分析和領悟:正確答案選擇E。我當時選擇A。本題關鍵點在於A 和B 答案都是對的,因此應該將兩個答案結合起來才行,當時只看了一個答案草草完事,很是的不細心,之後要注意。
- 問題5: Why shouldn't an abstract method be declared final?(爲何不該該把一個抽象的方法聲明爲final呢?)
A . There's nothing wrong with doing so(這樣作沒毛病)
B . Abstract methods cannot be overridden and they must be if a concrete class ever is to be instantiated(抽象方法不能被覆蓋,它們必須是要實例化的具體類)
C . So long as the Abstract method never actually is used in by any other method, there's no problem with doing this(只要抽象方法歷來沒有被任何其餘方法使用過,那麼作這個就沒有問題了)
D . So long as the Abstract method is declared in a Class (not an Interface), there's nothing wrong with doing this(只要抽象方法在類中聲明(而不是接口),那麼作這件事就沒有什麼錯)
E . None of the above(沒有正確選項)
- 問題5分析和領悟:正確答案B,我當時的選項E,
我也不知道我爲何要選E。要使抽象方法成爲具體的方法,它必須被覆蓋。聲明一個方法是final的,就讓其不可能被覆蓋。所以不能。
- 問題6: Interface classes cannot be extended but classes that implement interfaces can be extended.(接口類不能被擴展,可是實現接口的類能夠被擴展)
A . true
B . false
- 問題6分析和領悟: 正確答案選B,當時我選的是A,屬於對概念不清楚。任何類均可以被擴展,不管它是一個接口,仍是實現一個接口,或者二者都沒有。惟一的例外是,若是該類被顯式地用「final」這個詞進行修飾,在這種狀況下,它不能被擴展。
此次的錯題改正裏面的翻譯是本身查閱翻譯的喲!!函數
結對及互評
-20172301
-20172304學習
點評模板:
- 博客中值得學習的或問題:
- 20172301:生動詳細,須要瞭解向上轉型和向下轉型的小夥伴們必定不要錯過這篇好博,顏色繽紛,吸引眼球,先睹爲快。
- 20172304:簡明扼要,須要學習pp10.5編程項目的不要錯過這篇博客,但願就是能稍微多一些內容,顯得更加充實一點。
- 代碼中值得學習的或問題:
其餘(感悟、思考等,可選)
五一遊玩帶給我不少歡樂清閒,同時也帶給我很大心理壓力。當再次拿起課本大腦空空,打開電腦藍墨雲紅紅的時候,忽然就有一種無所適從的感受,沒有歸屬感大概如此。
---------------------------------
課程的學習進度從未中止,時間也容不得我慢慢來。我但願深吸一口氣我可以從新開始打起精神認真對待,靈魂的疲憊讓路程艱難,心裏的堅決讓本身繼續前進。
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
第一週 |
100/100 |
1/1 |
15/15 |
第二週 |
377/477 |
1/2 |
20/35 |
第三週 |
280/757 |
2/4 |
22/57 |
第四周 |
973/1730 |
1/5 |
35/92 |
第五週 |
1000/2730 |
1/6 |
40/132 |
第六週 |
729 /3459 |
1/7 |
40/172 |
第七週 |
660/4119 |
2/9 |
30/192 |
第八週 |
1417/5536 |
3/12 |
30/222 |
參考資料