今天具體看了下第八章和第十一章;第九章的接口很多東西還沒有搞明白,所以還是明天花時(shí)間搞定一下;下面是今天的知識(shí):
第八章:多態(tài)
前幾章我發(fā)現(xiàn),繼承允許將對(duì)象作為對(duì)象本身和作為對(duì)象的基類來運(yùn)行;在這種情況下,可以實(shí)現(xiàn)用一個(gè)基類作為函數(shù)的參數(shù),讓這個(gè)函數(shù)調(diào)用這個(gè)基類的各種子類;
而在這里,又要用動(dòng)態(tài)綁定知識(shí)了,靜態(tài)綁定指的是在編譯器剛編譯時(shí)就綁定了的函數(shù),這種函數(shù)的參數(shù),運(yùn)行結(jié)果早就已經(jīng)固定了,一般這種是static函數(shù)和final函數(shù);而動(dòng)態(tài)綁定則是只有在運(yùn)行時(shí)才知道具體要運(yùn)行的代碼,根據(jù)傳入?yún)?shù)的類型來決定調(diào)用那些代碼;
多態(tài)就是這樣,根據(jù)作為參數(shù)傳入的基類引用綁定的具體子類對(duì)象的類型,判斷調(diào)用那個(gè)子類中具體的函數(shù);把子類對(duì)象用基類引用傳入函數(shù)中時(shí),在函數(shù)中調(diào)用基類方法時(shí),調(diào)用的是這個(gè)子類中已經(jīng)重寫過的方法;多態(tài)就是借用這個(gè)特性,用基類引用作為參數(shù),實(shí)現(xiàn)在不知道子類類型的情況下調(diào)用子類的代碼;
說起前面的向上轉(zhuǎn)型,基類和子類的關(guān)系就是一種子類包含基類的關(guān)系,子類》=基類;所以向上轉(zhuǎn)型就是指去掉子類中那些和基類不重疊的地方,把子類當(dāng)做一個(gè)方法一樣的基類來使用,相對(duì)于來說是減小了子類的范圍域;
說到向上轉(zhuǎn)型就有向下轉(zhuǎn)型,這里指的是對(duì)那些已經(jīng)作為基類引用的子類對(duì)象,對(duì)這個(gè)基類引用進(jìn)行子類引用的強(qiáng)轉(zhuǎn)型,這里編譯器會(huì)自動(dòng)判斷是否轉(zhuǎn)型成功;轉(zhuǎn)型成功后還可以調(diào)用那些擴(kuò)展的方法;類似于下面的代碼;

上面moreuseful對(duì)象綁定在useful引用上,下面又對(duì)useful引用進(jìn)行擴(kuò)展的強(qiáng)轉(zhuǎn)型;這里編譯器沒有報(bào)錯(cuò),說明這種方法是可行的;
基類被復(fù)寫的方法之間是相互獨(dú)立的;在子類的構(gòu)造器中,最好不要用被復(fù)寫的方法,這樣的話在初始化子類時(shí),父類構(gòu)造器被調(diào)用,這個(gè)時(shí)候父類中的這個(gè)方法也會(huì)用到多態(tài)屬性,調(diào)用子類已經(jīng)復(fù)寫過的方法;所以一般用簡單的語句來編寫構(gòu)造方法;盡量不要在構(gòu)造器中調(diào)用被復(fù)寫的方法;
第十一章:持有對(duì)象(容器)
容器指的是存儲(chǔ)數(shù)據(jù)的對(duì)象,這個(gè)和數(shù)組不同,容器可以根據(jù)數(shù)據(jù)的大小自動(dòng)的生成對(duì)應(yīng)的空間;而容器可以存儲(chǔ)入任何對(duì)象;為了防止一個(gè)容器存入多種對(duì)象,用泛型來標(biāo)記存入對(duì)象的類型;容器也是對(duì)象;
泛型的語法:collection<Shape> s = new collection <.Shape > ();Shape代表存入其中的對(duì)象;
容器的父類為collection;其余的容器都是collection的子類;
容器分成兩大類:1.獨(dú)立元素隊(duì)列,像是一維序列;List,ArrayList,LinkedList,set,Hashset……等很多類型,其中每個(gè)類型有自己的長處和短處; ? ?2.map類型,由鍵-值對(duì)組成的隊(duì)列,其中鍵是不能重復(fù)的,值可以由任何對(duì)象組成,主要是一個(gè)相對(duì)的關(guān)系;
下面就先解釋collection:
往collection中插入數(shù)據(jù):1.add方法;2.collections.addAll(collection,array);3.arrays.asList(Array);返回一個(gè)list<T>對(duì)象;4.collecition.addAll( collection <T> s);用collection對(duì)象作為參數(shù)來初始化;上面四種方法,其中先創(chuàng)建一個(gè)空collection,再用2,3兩種方法添加則是最快的;(有一點(diǎn):arrays.asList返回的對(duì)象本質(zhì)上是數(shù)組,所有在進(jìn)行增刪操作時(shí)會(huì)提示不能被resize)
容器打印直接調(diào)用print打印即可;
迭代器:iterator對(duì)象;每一個(gè)collection中都有iterator()方法,返回的是一個(gè)iterator對(duì)象;該對(duì)象內(nèi)有hasNext方法,next,nextIndex方法;可以用foreach來循環(huán)輸出所有的數(shù)據(jù);我個(gè)人感覺,內(nèi)部是有一個(gè)變量next,初始化為o,nextIndex方法返回這個(gè)變量,調(diào)用next方法時(shí)返回該下標(biāo)的對(duì)象,然后next++;remove方法除去的對(duì)象的下標(biāo)是這個(gè)變量-1;至于在list中的ListIterator中的previous方法返回的是下標(biāo)為變量-1的對(duì)象;
下面介紹容器的子類:
1.List<T>:這個(gè)list的是基于collection的容器,它分為ArrayList和LinkedList;內(nèi)部的迭代器就是上文的listIterator;它相對(duì)于collection添加了一些方法,方法和功能如下:

上面的方法中,前兩個(gè)contains是判斷該list中是否存在對(duì)象,1的參數(shù)為對(duì)象引用,2的參數(shù)為對(duì)象數(shù)組;3根據(jù)引用去除list中的對(duì)象;4用引用找出在list中的下標(biāo);5.equals方法和1一樣;6.sublist方法是把list中的數(shù)據(jù)根據(jù)下標(biāo)ab取出來返回一個(gè)對(duì)象數(shù)組,【a,b);7.isEmpty判斷是否為空;8.toAtrray則將list變成數(shù)組;
在list中分成ArrayList和LinkedList,就好像數(shù)組和鏈表的區(qū)別,arrayList傾向于隨機(jī)讀取數(shù)據(jù),LinkedList則傾向于增刪數(shù)據(jù);各有各的擅長部分;下面是LinkedList的幾個(gè)方法;
linkedList本質(zhì)上是一個(gè)雙向鏈表;內(nèi)部有addFirst();addLast;getFirst;getLast;removeFirst;removeLast;另外,1,remove和poll方法去除首端對(duì)象并返回;2.peek和element返回首端對(duì)象但不去除;3.offer和add在尾端添加對(duì)象;
這些函數(shù)也為LinkedList添加了擴(kuò)展的機(jī)會(huì)。Stack(棧LIFO)Queue(隊(duì)列FIFO)都是由LinkedList衍生而來的;尤其是Queue,新添加的幾個(gè)方法都是為Queue而存在的;
2.set:說完了list,說set,set是一個(gè)不不保存重復(fù)對(duì)象的容器,它的作用主要是用來測(cè)試歸屬性,即該對(duì)象是否存在于本容器中;set用contains來測(cè)試歸屬性;用add來添加對(duì)象;用remove來清除對(duì)象;
set的分類:1.Hashset:高速存儲(chǔ)和查驗(yàn);2.TreeSet:按順序排布數(shù)據(jù);3,linkedHashSet:按照存儲(chǔ)的順序排布且具有高速存儲(chǔ)查驗(yàn)的set;
3.map:主要是鍵值對(duì);對(duì)應(yīng)python中的dict;1.put添加數(shù)據(jù),2.keySet()返回鍵的set對(duì)象;3.values()返回值的collection對(duì)象;4.get(鍵)查找值;5.用remove(鍵)刪除鍵值對(duì);
foreach可以用于任意的collection,因?yàn)樵赾ollection內(nèi)部有iterator類;這個(gè)代表foreach可以對(duì)iterator類進(jìn)行便歷;只要對(duì)象中有這種類型的方法,它就可以通過iterator類來遍歷容器中所有的對(duì)象;
上面就是今天的知識(shí),以后有時(shí)間再修改補(bǔ)充;