類钞馁、子類和超類
關(guān)鍵字extends表明構(gòu)造的新類派生于一個(gè)已經(jīng)存在的類虑省。已經(jīng)存在的類稱為超類,基類或者父類僧凰。新類稱為子類探颈、派生類i。
在通過(guò)超類擴(kuò)展子類的時(shí)候训措,僅僅需要指出子類與超類的不同之處伪节。在設(shè)計(jì)的時(shí)候光羞,應(yīng)將通用方法放在超類當(dāng)中,具有特殊用途的方法放在子類當(dāng)中架馋。然而狞山,超類當(dāng)中有些方法在子類并不適用全闷,為此需要提供一個(gè)新的方法覆蓋(override)它叉寂。
super關(guān)鍵字: 在子類當(dāng)中,不能夠直接訪問(wèn)超類的私有 域总珠,而是應(yīng)該通過(guò)超類的公共接口來(lái)進(jìn)行訪問(wèn)屏鳍。但是由于子類在繼承超類時(shí),也同時(shí)繼承了與這個(gè)公共接口同名的方法局服。所以钓瞭,想要在子類當(dāng)中調(diào)用超類的公共接口要使用super。
在子類中淫奔,能夠增加域山涡,增加方法或者覆蓋方法。但是不能刪減域或者刪減方法唆迁。
構(gòu)造方法:以為子類不能訪問(wèn)超類的私有域鸭丛,所以對(duì)那部分域的初始化要通過(guò)調(diào)用超類的構(gòu)造器。如果沒(méi)有顯示的調(diào)用超類的構(gòu)造器唐责,編譯器將自動(dòng)調(diào)用超類沒(méi)有參數(shù)的構(gòu)造器鳞溉,如果超類當(dāng)中沒(méi)有沒(méi)有參數(shù)的構(gòu)造器,編譯器將報(bào)錯(cuò)鼠哥。
多態(tài)
多態(tài):一個(gè)對(duì)象變量可以引用多種實(shí)際類型的現(xiàn)象熟菲。
is-a規(guī)則:又叫做置換規(guī)則。表明程序當(dāng)中出現(xiàn)的任何超類對(duì)象的地方都可以通過(guò)子類對(duì)象來(lái)進(jìn)行替換朴恳。也就是說(shuō)抄罕,可以將一個(gè)子類對(duì)象賦值給一個(gè)超類對(duì)象變量。
阻止繼承:用final修飾的類不能被其他的子類繼承于颖。類中也可以用final修飾方法呆贿,經(jīng)過(guò)final修飾的方法不可以子類覆蓋。
強(qiáng)制類型轉(zhuǎn)換
類型轉(zhuǎn)換:將一個(gè)類型強(qiáng)制轉(zhuǎn)換成另一個(gè)類型的過(guò)程恍飘。
進(jìn)行類型轉(zhuǎn)換哦唯一原因:在暫時(shí)忽略對(duì)象的實(shí)際類型之后榨崩,使用對(duì)象的全部功能。
編譯器規(guī)則:將一個(gè)子類的引用賦值給一個(gè)超類變量是允許的章母。但是將一個(gè)超類的引用賦值給一個(gè)子類的變量就必須進(jìn)行強(qiáng)制轉(zhuǎn)換母蛛,否則編譯器會(huì)報(bào)錯(cuò)。
綜述:只能在繼承層次內(nèi)進(jìn)行對(duì)象的強(qiáng)制轉(zhuǎn)換乳怎;在將超類轉(zhuǎn)化為子類時(shí)需要使用instanceof進(jìn)行檢查彩郊。
所有類的超類Object
Object類是Java當(dāng)中所有類的祖先前弯,在Java中所有類都有由它拓展而來(lái)。
equals方法:該方法用來(lái)檢測(cè)兩個(gè)對(duì)象是否相等秫逝,Object類當(dāng)中這個(gè)方法用來(lái)判斷兩個(gè)對(duì)象的引用是否相同恕出。
toString方法:返回用于表示對(duì)象值的字符串。若一個(gè)對(duì)象當(dāng)中定義了toString方法违帆,只要一個(gè)字符串與一個(gè)對(duì)象通過(guò)“+”連在一起就會(huì)自動(dòng)調(diào)用toString方法浙巫。
泛型數(shù)組列表
作用:解決在編譯前就要確定數(shù)據(jù)大小的問(wèn)題。
語(yǔ)法:ArrayList<對(duì)象類型>名稱 = new ArrayList<對(duì)象類型>()刷后;
方法:使用add()方法可以往數(shù)組列表當(dāng)中添加對(duì)象的畴;ensureCapacity(數(shù)字)適用于事先就確定了容量的數(shù)組列表; size()方法返回?cái)?shù)組列表實(shí)際的元素?cái)?shù)目尝胆;
數(shù)組列表容量與數(shù)組大小的區(qū)別:數(shù)組大小表示數(shù)組可以裝載多少個(gè)元素丧裁,數(shù)組列表容量只是表示擁有保存一定數(shù)目元素的潛力。
訪問(wèn)數(shù)組列表:使用set(i, value)和get(i)方法含衔,而不是傳統(tǒng)的 [ ] 符號(hào)煎娇。注意:add方法添加元素,set方法只能夠替換元素贪染。
對(duì)象包裝器和打包
有時(shí)候缓呛,需要將int這樣的基本類轉(zhuǎn)換成對(duì)象來(lái)使用。在Java中抑进,每一個(gè)基本類型都有一個(gè)與之相對(duì)應(yīng)的類强经。例如,Integer類對(duì)應(yīng)Int寺渗。這些類被稱為包裝器(wrapper)匿情。它們分別是:Integer、Long信殊、Double炬称、Float、Short涡拘、Byte玲躯、Chareter、Void鳄乏、Boolean跷车。對(duì)象包裝類是不可變的,同時(shí)也不能被繼承橱野。
自動(dòng)打包與自動(dòng)拆包:當(dāng)基本類型被賦到應(yīng)該使用對(duì)象的地方朽缴,Java會(huì)自動(dòng)的將類型轉(zhuǎn)換,這種過(guò)程叫做自動(dòng)打包水援。當(dāng)對(duì)象被賦值到需要使用基本類型的地方密强,Java自動(dòng)將類型轉(zhuǎn)換茅郎,這個(gè)過(guò)程叫做自動(dòng)拆包。
繼承設(shè)計(jì)技巧
將公共操作和域放在超類或渤;
不要使用受保護(hù)的域系冗;
使用繼承實(shí)現(xiàn)is-a關(guān)系;
除非繼承的所有方法都有意義薪鹦,否則不要使用繼承掌敬;
在覆蓋方法時(shí),不要改變預(yù)期的行為距芬;
使用多態(tài)涝开,而非類型信息;
不要過(guò)多地使用反射框仔;