第六章知識點總結html
1-繼承共同行爲:若是在程序設計上存在着重複,那就須要修改,能夠吧相同的程序代碼提高(pull up)爲父類。extends關鍵字表示新建的類會擴充原有的類的行爲。java
2-多態與is-a:子類只能繼承一個父類,而且子類與父類之間有一種is-a的關係,讓不是一種的類扮演另外一種類須要加上相似於 強制類型轉換的語法。-使用單一接口操做多種類型的對象就是多態,我的的理解就是用一種父類來控制許多的子類。程序員
3-從新定義行爲:在繼承父類以後,定義與父類中相同的方法部署,但執行內容不一樣,這稱爲從新定義(Override)。在從新定義父類中某個方法的時候,子類必須撰寫與父類方法中相同的簽署,加上@Override可用來檢查該方法是否真的從新定義了父類中的某個方法,防止打錯字,不然就會發生錯誤。算法
4-抽象方法、抽象類:若是某個方法區塊中真的沒有任何程序代碼操做,可使用abstract標示該方法public abstract void fight,定義不完整的類就不能用來生成實例,內含抽象方法的類也必定要定義爲不完整的抽象類,子類繼承抽象類,對於抽象方法,一種是繼續標示其爲抽象類,另外一種就是操做抽象方法數組
5-protected成員:被聲明爲protected的成員,相同包中的類能夠直接存取,不一樣包中的類能夠在繼承後的子類直接存取.所以要記住java的3(4)個權限關鍵詞及其對應的權限範圍,詳見P172表6.1ide
6-從新定義的細節:若是想取得父類中的方法定義,能夠在調用方法前加上super關鍵字,從新定義父類中的方法在子類中權限只能擴大不能縮小,在jdk5以後返回類型也能夠是父類中方法返回類型的子類函數
7-再看構造函數:在建立子類實例後,會先進行父類定義的初始流程,在進行子類定義的初始流程,若是子類構造父類函數中沒有指定執行父類中哪一個構造函數,默認會調用父類中無參數構造函數若是父類中定義了構造函數,子類構造函數時就要注意調用父類中的哪一個函數學習
8-再看final關鍵字:若是在class前加上final關鍵字,這就表示這個類是最後一個了,不會再有子類,也就是不能被繼承。動畫
9-java.lang.object:任何類的最上層父類必定就是java.lang.object,所以Object數組能夠來收集各類類型的對象。instanceof:左操做數爲對象,右操做數是類,能夠用來判斷對象是否由某個類建立this
10-垃圾收集:對於再也不有用的對象,JVM的垃圾收集器會將其釋放。不一樣的需求會有不一樣的垃圾收集算法。
抽象類:若是還有些方面沒有肯定,能夠調用抽象方法,等到平臺肯定後,再對代碼進行符合這個平臺的完善就行。
第七章知識點總結
1-接口定義行爲:對於定義行爲,可使用interace關鍵字定義,類要操做接口,必須使用implements關鍵字,對接口中定義的方法有兩種操做方式,一是操做接口中定義的方法,二是再度將該方法表示爲abstract。操做接口表示「擁有行爲」,再也不是「是一種」的關係。
2-行爲的多態:與繼承相同,也可讓一個對象強行扮演(cast)某種行爲,與多態相同,只要是操做同一個接口的類均可以擁有接口的行爲,可維護型也同時獲得了較大的提升。
3-解決需求變化:在java中類能夠操做兩個以上的類,能夠同時繼承某個類並操做某些接口;於此同時,java中接口能夠繼承自另外一個接口,也就是繼承父接口行爲,再在子接口中額外定義行爲。
4-接口中的方法沒有操做時,必定得是公開而且抽象。 在interface接口中經常能夠定義枚舉常數(例:public static final int),實際上,在interface接口中也只能定義public static final的枚舉常數,而且必定要使用=指定值,不然就會編譯錯誤。我的感受枚舉常數在表達意思上更清楚一些,便於程序員讀懂程序。接口也能夠繼承接口。
5-匿名內部類:主要是在臨時繼承某個類或操做某個接口並創建實例的需求(例:Some some=new Some(){};)
6-使用enum枚舉常數:public enum Action{},實際上enum定義了特殊的類,enum中的元素也就是枚舉常數。
教材學習中的問題和解決過程 課後練習:
Ch6:A D D AC DC C B A D
Ch7:A B A B B A D A A A
定義ArrayList類,不限長度地收集對象
import java.util.Arrays;
public class ArrayList { private Object[] list; private int next;
public ArrayList(int capacity) { list=new Object[capacity]; } public ArrayList() { this(16); } public void add(Object o) { if(next==list.length) { list=Arrays.copyOf(list, list.length*2); } list[next++]=o; } public Object get(int index) { return list[index]; } public int size() { return next; }
}
設計一款RPG遊戲的部分代碼
public class PRG{ public static void main(String[] args){ demoSwordMan(); demoMagician(); }
static void demoSwordsMan(){ SwordsMan swordsMan = new SwordsMan(); swordsMan.setname("Justin"); swordsMan.setlevel(1); swordsMan.setblood(200); System.out.printf("劍士:(%s,%d,%d)%n",swordsMan.getName(),swordsMan.getLevel(),swordsMan.getBlood()); } static coid demoMagician(){ Magician magician =new Magician(); magician.setname("Monica"); magician.setLevel(1); magician.setBlood(100); System.out.printf("魔法師:(%s,%d,%d)%n",magician.getName(),magician.getLevel(),magician.getBlood()); }
}
關於Override描述 Override也稱函數覆蓋,重寫,複寫 父類中的私有方法不能夠被覆蓋 在子類覆蓋方法中,繼續使用被覆蓋的方法能夠經過super.函數名獲取 覆蓋時,子類方法權限必定不能小於父類方法權限 當子類須要父類的功能,而功能主題子類有本身特有內容時,能夠override父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容
關於將枚舉類用在了switch語句中的問題
```
import static java.lang.System.out;
public class EnumGame {
public static void main(String[] args) { play(EnumAction.RIGHT); play(EnumAction.UP); } public static void play(EnumAction action) { switch (action) { case STOP: out.println("播放中止動畫"); break; case RIGHT: out.println("播放向右動畫"); break; case LEFT: out.println("播放向左動畫"); break; case UP: out.println("播放向上動畫"); break; case DOWN: out.println("播放向下動畫"); break; } }
} ```
使用interface來定義抽象的行爲與外觀,如接口中的方法可聲明爲public abstract
```
public interface Action{
public static final int STOP=0; public static final int RIGHT=1; public static final int LEFT=2; public static final int UP=3; public static final int DOWN=4;
}
import static java.lang.System.out;
public class Game{
public static void main(String[] args){ play(Action.RIGHT); play(Action.UP); } public static void play(int action){ switch(action){ case Action.STOP: out.println("bofangtingzhidonghua"); break; case Action.RIGHT: out.println("bofangxiangyoudonghua"); break; case Action.LEFT: out.println("bofangxiangzuodonghua"); break; case Action.UP: out.println("bofangxiangshangdonghua"); break; case Action.DOWN: out.println("bofangxiangxiadonghua"); break; default: out.println("buzhichicidongzuo"); } }
} ```
在忙碌中完成了這周的學習,這周的學習圍繞着繼承和接口,兩者類似而不相同,學習內容較爲抽象,看了老師分享的畢向東老師的視頻,我我的感受有些抽象的東西仍是要看視頻,視頻中表達的方式和接受的深度要更高一點,也慢慢地感覺到了java的魅力。語言問題仍是要多練習多練習!
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
目標 | 3000行 | 20 | 300 | |
第四周 | 250/350 | 1/3 | 21/30 |