學號20172328《程序設計與數據結構》第七週學習總結
第九章教材學習內容總結
- 1.繼承的概念:
- 繼承是在父類和子類之間創建一種「是」的關係。
- 用於派生新類的原始類稱爲父類、超類或基類,被派生出的類就稱爲子類或者亞類。
- 2.繼承具備單向性。java中用extends來表示新類由現有類派生。
- 3.protected修飾符:當變量聲明爲protected可見性時,子類就能夠引用它,而且使父類保持了必定的封裝性。
(在UML圖中,用#表示protected可見性。)
- 4.super引用,使用super引用能夠訪問父類的成員。子類構造方法負責調用父類構造方法,並且應該在子類的構造方法的第一行用super()引用調用父類構造方法。
- 5.java的繼承方法爲單繼承,即子類只能有惟一的父類。在java中能夠依賴接口實現多繼承,
- 6.重寫方法:即子類和父類裏面有相同的方法和簽名時,子類方法能夠重寫父類方法,子類方法優先。調用方法的對象決定決定了哪個版本的方法將被實際執行。
- 7.影子變量:若是在一個子類中聲明一個同名變量,則該變量稱爲影子變量。
- 8.類層次結構:繼承關係一般發展成一個類層次結構。在類層次結構中,應當重視合理將類的公共特徵保持在儘量高的層級上。
- 9.全部的類都是直接或者間接由object類派生。object類定義在Java標準類庫的java.lang包中。
10.final修飾符能夠限制繼承的能力。用final修飾符聲明方法,使得該方法在任何派生類中不能被重寫。html
教材學習中的問題和解決過程
- 問題1:變量聲明爲protected可見性的封裝性不如private可見性嚴格,但比public可見性很強。
1.(〃'▽'〃)本題解答:java
public:具備最大的訪問權限,能夠訪問任何一個在classpath下的類、接口、異常等。它每每用於對外的狀況,也就是對象或類對外的一種接口的形式。git
protected:主要的做用就是用來保護子類的。它的含義在於子類能夠用它修飾的成員,其餘的不能夠,它至關於傳遞給子類的一種繼承的東西程序員
default:有時候也稱爲friendly,它是針對本包訪問而設計的,任何處於本包下的類、接口、異常等,均可以相互訪問,即便是父類沒有用protected修飾的成員也能夠。數組
- private:訪問權限僅限於類的內部,是一種封裝的體現,例如,大多數成員變量都是修飾符爲private的,它們不但願被其餘任何外部的類訪問。
- 問題2:類的派生表明什麼關係?
- 2.(〃'▽'〃)本題解答:繼承是從已有的類中派生出新的類,新的類能吸取已有類的數據屬性和行爲,並能擴展新的能力,是使用已存在的類的定義做爲基礎創建新類的技術,新類的定義能夠增長新的數據或新的功能,也能夠用父類的功能,但不能選擇性地繼承父類。
- 問題3:抽象類和接口的區別?
3.(〃'▽'〃)本題解答:abstract class和interface是Java語言中對於抽象類定義進行支持的兩種機制,正是因爲這兩種機制的存在,才賦予了Java強大的面向對象能力。 abstract class和interface之間在對於抽象類定義的支持方面具備很大的類似性,甚至能夠相互替換。數據結構
抽象類和接口都不能直接實例化,若是要實例化,抽象類變量必須指向實現全部抽象方法的子類對象,接口變量必須指向實現全部接口方法的類對象。抽象類要被子類繼承,接口要被類實現。接口只能作方法申明,抽象類中能夠作方法申明,也能夠作方法實現。接口裏定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。抽象類裏的抽象方法必須所有被子類所實現,若是子類不能所有實現父類抽象方法,那麼該子類只能是抽象類。一樣,一個類實現接口的時候,如不能所有實現接口方法,那麼該類也只能爲抽象類。抽象方法只能申明,不能實現。abstract void abc();不能寫成abstract void abc(){}。抽象類裏能夠沒有抽象方法。若是一個類裏有抽象方法,那麼這個類只能是抽象類。抽象方法要被實現,因此不能是靜態的,也不能是私有的。接口可繼承接口,並可多繼承接口,但類只能單方面繼承。學習
代碼調試中的問題和解決過程
代碼託管(statistics.sh腳本的運行結果截圖)
上週考試錯題總結
- 問題1: In Java, arrays are(在java中,數組是)
A . primitive data types(原始數據類型)
B . objects(對象)
C . interfaces(接口)
D . primitive data types if the type stored in the array is a primitive data type and objects if the type stored in the array is an object(若是數組中存儲的類型是原始數據類型和對象,若是數組中存儲的類型是對象,則原始數據類型是原始數據類型。)
E . Strings(字符串)
-
問題1分析和領悟:選擇B,在Java中,數組被實現爲對象。變量是存儲整個數組的內存塊的引用變量。 |
- 問題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?(若是一個int數組做爲參數傳遞給方法,下面哪一個選項能夠爲方法頭定義參數列表?)
A . (int[ ])
B . (int a[ ])
C . (int[ ] a)
D . (int a)
E . (a[ ])
-
問題2分析和領悟:選擇C,參數被定義爲變量最初被聲明爲類型參數名稱。這裏,類型爲int[],參數爲a。當時我以爲B、C同樣均可以聲明數組,沒有好好考慮直接排除了。 |
- 問題3:Assume that BankAccount is a predefined class and that the declaration BankAccount[ ] firstEmpireBank; has already been performed. Then the following instruction reserves memory space for
firstEmpireBank = new BankAccount[1000];(假設BankAccount是一個預約義的類,而且該聲明BankAccount[] firstrebank;已經被執行。而後,下面的指令存儲內存空間。)
A . a reference variable to the memory that stores all 1000 BankAccount entries(存儲全部1000個BankAccount條目的內存的引用變量。)
B . 1000 reference variables, each of which point to a single BankAccount entry(1000個參考變量,每一個變量指向一個銀行賬戶條目。)
C . a single BankAccount entry(一個BankAccount條目)
D . 1000 BankAccount entries(1000個BankAccount條目)
E . 1000 reference variables and 1000 BankAccount entries(1000個參考變量和1000個BankAccount條目)
-
問題3分析和領悟:第一次銀行賬戶;爲firstentity銀行保留內存空間,它自己是指向BankAccount[]對象的引用變量。實例化BankAccount[]對象爲1000個BankAccount對象。語句保留了1000個引用變量的內存空間。請注意,這1000個銀行中沒有一個對象。 |
- 問題4: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
-
問題4分析和領悟:選擇D,第一個聲明聲明a和b都是int數組。第二個聲明聲明c和d是int型,但d是一個int數組,c是變量。a b和d都是int數組。 |
- 問題5:If a and b are both int arrays, then a = b; will(若是a和b都是int數組,那麼a = b;將)
A . create an alias(建立一個別名)
B . copy all elements of b into a(將b的全部元素複製到a中)
C . copy the 0th element of b into the 0th element of a(把b的第0個元素複製到a的第0個元素中。)
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(若是b的每一個對應元素都等於a的對應元素(即a[0] = b[0], a[1] = b[1]等),則返回true,不然返回false)
E . return true if a and b are aliases and return false otherwise(若是A 和B 是數組就返回ture,不然返回false)
-
問題5分析和領悟:選擇A,「=」是一個賦值運算符。若是兩個變量都是原語,比左邊的變量副本右邊變量(若是a和b是int值,b = 5,而後將成爲5)。然而,由於a和b是數組的引用變量設置爲參考變量b,致使a和b都引用同一個數組在內存中,或者他們如今彼此的別名。 |
- 問題6: A 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.(Java主方法使用參數(String[] variable),以便用戶能夠運行程序並提供「命令行」參數。因爲參數是一個字符串數組,所以用戶沒必要提供任何參數。)
A.True
B.Flase
-
問題6分析和領悟: 主方法須要參數,以防程序員但願容許用戶提供命令行參數。在java命令以後,在命令行輸入的任何內容都將被接受爲命令行參數。若是是由空格分隔的幾個單詞,那麼每一個單詞都做爲一個單獨的字符串數組元素存儲。 |
- 問題7:In Java, an array can only store one type of data. For instance, you cannot create an array that stores both double and String values.(在java中,一個數組只能儲存一種類型的數據,舉個例子,你不能將浮點型和字符串型放一塊兒。)
-
問題7分析和領悟:選擇true, 數組被稱爲同構類型。這意味着存儲在數組中的值的類型必須與每一個元素相同。類型由聲明決定。所以,int[] x只使x爲int值的數組。所以,沒有數組能夠同時存儲double型和String型。 |
- 問題8: 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.(只要只訪問ArrayList的元素,它的效率與數組的效率差很少。只有當一我的開始在ArrayList的前部分插入或移除元素時,它的效率纔會變差)
-
問題8分析和領悟:選擇Ture,ArrayList是做爲數組實現的,只要其中一個只是訪問ArrayList的元素,效率與數組的效率是同樣的。可是,當對ArrayList的前部分進行插入或刪除時,就會發生大量的元素複製,從而下降其效率。 |
結對及互評
-20172301
-20172304命令行
點評模板:
其餘(感悟、思考等,可選)
繼承是咱們在學習第七章(7.4)時若隱若現出現的內容,當時沒有去思考、去感悟、只簡單層次的瞭解了類之間的調用和聚合關係;其實在學習過程當中遺忘的仍是蠻快的,這周的心得就是在向前走的時候也回頭看看,不讓本身丟太多,也讓本身融會貫通新知與舊識。In conclusion:I have nothing to offer but blood ,toil,tears and sweat.
學習進度條
目標 |
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 |
參考資料