20165228 2016-2017-2 《Java程序設計》第4周學習總結
教材學習內容總結
- 子類與繼承
class 子類名 extends 父類名{
...
}
- 一個子類只能有一個父類,子類繼承父類的屬性與行爲,並可增長其新的屬性和行爲。Object是全部類的祖先類,若一個類聲明中未使用extends關鍵詞,則默認是Object的子類。習慣稱子類與父類的關係爲"is-a"關係
- 子類的繼承性
- 當子類和父類在同一個包中時,那麼子類繼承其父類中不是private的成員變量(方法)做爲本身的成員變量(方法)
- 當子類和父類不在同一個包中時,子類只繼承父類中的protected和public訪問權限的成員變量做爲子類的成員變量。一樣,子類只繼承父類的protected和public訪問權限的方法做爲子類的方法
- 關於protected的說明:一個類中的protected的成員變量和方法能夠被它的子孫類繼承。
- 若是用D類再D自己建立一個對象,那麼該對象老是能夠經過"."運算符訪問繼承的或本身定義的protected變量及方法。
- 若是在另外一個類中,例如在Other類中用D類建立一個對象object,該對象經過"."運算符訪問protected變量及方法時,對於子類D本身聲明的protected成員變量和方法,只要Other類和D類在同一個包中,object對象就能夠訪問這些protected成員變量和方法。對於子類D從父類繼承的protected成員變量和方法,只要Other類和這些protected成員變量和方法所在的祖先類在同一個包中,object類對象能訪問繼承的protected變量和方法
- 子類與對象
- 子類不繼承父類的私有成員變量
- 子類與父類不在同一個包中,子類不繼承父類的友好成員變量
- instanceof運算符是Java獨有的雙目運算符,其左邊的操做元是對象,右邊的操做元是類。當左邊的操做元是右邊的類或其子類所建立的對象時,運算結果是true,不然是false
- 成員變量的隱藏和方法重寫
- 子類聲明的成員變量名字和從父類繼承而來的成員變量的名字相同時,子類就會隱藏所繼承的成員變量
- 子類隱藏繼承的的成員變量的特色:
子類對象以及子類本身定義的方法操做與父類同名的成員變量是指子類從新聲明的這個成員變量
子類繼承的方法所操做的成員變狼必定是被子類繼承或隱藏的成員變量
- 子類繼承的方法只能操做子類繼承和隱藏的成員變量。子類新定義的方法能夠操做子類繼承和子類新聲明的成員變量,但沒法操做子類隱藏的成員變量(需使用super)
- 方法重寫(方法覆蓋):子類能夠經過重寫能夠隱藏已繼承的方法。指子類中定義一個方法,這個方法的類型和父類的方法的類型一致或者是父類的方法的類型的子類型,而且方法的名字、參數個數、參數類型和父類的方法徹底相同
- 若是子類能夠繼承父類的某個方法,那子類就有權利重寫這個方法。
- 重寫目的:把父類的狀態和行爲改變爲自身的狀態和行爲
- 重寫方法既能夠操做繼承的成員變量、調用繼承的方法,也能夠操做子類新聲明的成員變量、調用新定義的其餘方法,但沒法操做被子類隱藏的成員變量和方法(需使用關鍵詞super)
- 重寫注意事項:重寫父類方法時,不容許下降方法的訪問權限,但能夠提升權限
訪問權限從高到底的排列順序:public、protected、友好的、private
- super的使用
- 子類一旦隱藏了繼承的成員變量(方法),那麼子類建立的對象再也不擁有該變量(不能調用該方法),該變量(該方法的調用權)歸關鍵詞super全部。
- 若是子類想使用被子類隱藏的成員變量和方法
訪問和調用被子類隱藏的變量x:
```
super.x
訪問和調用被子類隱藏的方法play():
super.play()
```
- final關鍵字
- final關鍵字可修飾類、成員變量和方法中的局部變量
- final類:使用final聲明,不可繼承也不能有子類
final class A {
...
}
- final方法:修飾父類中的一個方法時,這個方法不容許子類重寫。不容許子類隱藏能夠繼承的final方法
- 常量
- 成員變量或局部變量被修飾爲final時,它就是常量,在聲明時無默認值。因此要求再聲明常量時指定它的值
- abstract類和abstract方法
abstract class A { ... }
abstract int min(int x,int y);
- 對於abstract方法,只容許聲明,不容許實現(沒有方法體),不容許使用final(及static)和abstract同時秀是一個方法和類。即abstract方法必須是實例方法
- abstract類只關心操做,而不關心細節
- abstract類中能夠有abstract方法,也能夠有非abstract方法(能夠沒有abstract方法)
- abstract類不能用new運算符建立對象
- 接口
- 使用interface來定義一個接口,接口定義包括接口聲明和接口體
```
interface 接口名 {
常量聲明+抽象方法(訪問權限必定是public)
}
- interface前面加上public,則這個public接口能夠被任何一個類實現。若是不加public,則稱做友好接口,只能被與該接口在同一個包中的類實現
- 接口可被繼承,可經過extends聲明一個接口是另外一個接口的自接口。因爲接口中的方法和常量都是public類,子接口將繼承父接口的所有方法和常量
- 接口屬於引用型變量,接口變量中能夠存放實現該接口的類的實例的引用,即存放對象的引用
- 接口回調:把實現某一接口的類建立的對象的引用賦值給該接口聲明的接口變量,那麼該接口變量就能夠調用被類實現的接口方法。實際上,當接口變量調用被類實現的接口方法時,就是通知相應的對象調用這個方法
- 接口參數:若是準備給一個方法的參數傳遞一個數值,可能但願該方法的參數的類型是double型,這樣就能向該參數傳遞byte、int、long、float和double型數據
- 若是一個方法的參數是接口類型,能夠將任何實現該接口的類的實例的引用傳遞給該接口參數
- abstract類與接口的比較:
- 問題1:如何將對象的上轉型對象強制轉換到一個子類對象?
- 問題1解決方案:還未解決,雖然百度過這個問題,可是仍然沒有明白如何操做
- 問題2:this能夠訪問被隱藏的變量和方法,和super的區別是什麼?
- 問題2解決方案:經過搜索資料,大概以下:
不一樣點:
一、super()主要是對父類構造函數的調用,this()是對重載構造函數的調用
二、super()主要是在繼承了父類的子類的構造函數中使用,是在不一樣類中的使用;this()主要是在同一類的不一樣構造函數中的使用
相同點:
一、super()和this()都必須在構造函數的第一行進行調用,不然就是錯誤的
- 問題3:使用IDEA調試帶中文的程序時,會提示「不可映射的GBK字符」
問題3解決方案:Setting->File Encodings->IDE Encoding選擇utf-8,不要選擇「system default」
同時,Default encoding for properties files 也選擇 UTF-8git
代碼調試中的問題和解決過程
- 問題1:運行Example5_8時提示「非法字符:’\u3008’」
問題1解決方案:寫代碼時,輸入法的全半角問題,切換到英文輸入法,把報錯行從新輸入便可函數

(statistics.sh腳本的運行結果截圖)學習
上週考試錯題總結
目標 |
5000行 |
25篇 |
400小時 |
|
第一週 |
235/235 |
1/1 |
15/15 |
|
第二週 |
224/459 |
2/3 |
15/30 |
|
第三週 |
443/902 |
1/4 |
15/73 |
|
第四周 |
577/1479 |
2/6 |
17/90 |
|
計劃學習時間:20小時調試
實際學習時間:17小時code