類(lèi)和對(duì)象:
類(lèi):主觀(guān)抽象,是對(duì)象的模板,可以實(shí)例化對(duì)象
習(xí)慣上類(lèi)的定義格式:
package xxx;
import xxx;
public class Xxxx{
屬性 ······;
構(gòu)造器 ······;
方法 ······;
}
定義屬性:實(shí)例變量
格式:[ 修飾符 ] 類(lèi)型 變量名 [ = ? ]
實(shí)例變量定義在類(lèi)中但在任何方法之外。
實(shí)例變量有默認(rèn)值:各種各樣的0。(同數(shù)組)
實(shí)例變量的作用域至少在本類(lèi)內(nèi)部,受訪(fǎng)問(wèn)控制符的限制。
在重合作用域,實(shí)例變量和局部變量允許有命名沖突,“局部?jī)?yōu)先”。
定義方法:
格式: [ 修飾符 ] 返回類(lèi)型 方法名( 參數(shù)列表 ) [ throws 異常 ] { ······ }
java中所有參數(shù)都是值傳遞。
當(dāng)沒(méi)有值返回時(shí),返回類(lèi)型必須被定義為void。
返回類(lèi)型必須與方法名相鄰,其他修飾符可以調(diào)換位置。
構(gòu)造器:
在創(chuàng)建對(duì)象的過(guò)程中調(diào)用的方法。
構(gòu)造器沒(méi)有返回類(lèi)型。
構(gòu)造器的名字與類(lèi)名相同。
格式為:[ 修飾符 ] 類(lèi)名( 參數(shù)列表 ){ },修飾符可以是private、 protected、 default、private
在一個(gè)對(duì)象的生成周期中構(gòu)造器只用一次,由系統(tǒng)自動(dòng)調(diào)用,不允許手工調(diào)用。
程序員沒(méi)有提供一個(gè)構(gòu)造器,系統(tǒng)會(huì)自動(dòng)提供一個(gè)無(wú)參的構(gòu)造器。
獲得對(duì)象的方式:
通過(guò)new(在堆空間中申請(qǐng)分配空間),new 類(lèi)名(),可以通過(guò)這種形式或的一個(gè)對(duì)象,這時(shí)的對(duì)象是無(wú)法使用,必須把他的地址存放進(jìn)一個(gè)對(duì)象變量才能夠使用。
例如 :
Car c=new Car();
注意:
最好在寫(xiě)類(lèi)時(shí)提供一個(gè)無(wú)參的構(gòu)造器。
this關(guān)鍵字:
this是個(gè)隱式參數(shù),代表當(dāng)前對(duì)象;
publie class Student{
private String name;
public void setName(String name){
this.name=name; //this.name為當(dāng)前對(duì)象的成員變量
}
}
如果某個(gè)構(gòu)造方法的第一個(gè)語(yǔ)句具有形式this( ··· ),那么這個(gè)構(gòu)造方法將調(diào)用同一類(lèi)中的其他構(gòu)造方法。
注意:
在構(gòu)造器中this(...)必須放在該構(gòu)造器的第一行。
this不能出現(xiàn)在靜態(tài)方法里面
類(lèi)、對(duì)象、實(shí)例三者的關(guān)系:
類(lèi):是對(duì)象的模板,可以實(shí)例化對(duì)象
對(duì)象:類(lèi)的個(gè)體
實(shí)例:實(shí)現(xiàn)的對(duì)象
student s;
s=new student();
其中 Student為類(lèi),s為對(duì)象,new Student()為實(shí)例,s賦值后也是實(shí)例了。
方法重載:
方法名相同,參數(shù)表不同,不考慮返回值類(lèi)型(但最好還是使返回類(lèi)型一致)。
編譯器根據(jù)參數(shù),選擇一個(gè)方法,如果沒(méi)有完全匹配的,對(duì)于參數(shù)表采用“向上就近匹配原則”,但不允許模棱兩可。
方法重載屏蔽了一個(gè)對(duì)象的同一類(lèi)方法由于參數(shù)不同所造成的差異。
封裝:
類(lèi)的屬性加private修飾符,來(lái)限制只能夠在類(lèi)的內(nèi)部進(jìn)行訪(fǎng)問(wèn),有效的保護(hù)數(shù)據(jù)。
對(duì)于類(lèi)中的私有屬性,要對(duì)其給出一對(duì)方法getXxx(),setXxx()訪(fǎng)問(wèn)私有屬性,保證對(duì)私有屬性的操作的安全性。
方法公開(kāi)的是方法的聲明,即只須知道參數(shù)和返回值就可以調(diào)用該方法,隱藏方法的實(shí)現(xiàn)的細(xì)節(jié)。
一個(gè)對(duì)象和外界的聯(lián)系應(yīng)當(dāng)通過(guò)一個(gè)統(tǒng)一的接口,應(yīng)當(dāng)公開(kāi)的公開(kāi),應(yīng)當(dāng)隱藏的隱藏。
繼承:
父類(lèi)到子類(lèi)是從一般到特殊的關(guān)系。
泛化:將不同子類(lèi)中的共性抽象成父類(lèi)的過(guò)程。
特化:在原有父類(lèi)的基礎(chǔ)上加入一些個(gè)性的過(guò)程。
原則:父類(lèi)放共性,子類(lèi)放個(gè)性。
繼承的關(guān)鍵字:extends
Java只支持單繼承:一個(gè)類(lèi)最多只有一個(gè)直接的父類(lèi)。
方法覆蓋:
方法名:相同
參數(shù)表:相同
訪(fǎng)問(wèn)限制符:相同或者更寬
返回值類(lèi)型:相同或者子類(lèi)返回的類(lèi)型是父類(lèi)返回的類(lèi)型的子類(lèi)(在JDK5.0以后)
拋出的異常:不能比父類(lèi)更寬。
super關(guān)鍵字:
super()表示調(diào)用父類(lèi)的構(gòu)造器
super()也和this()一樣必須放在方法的第一句
super()和this()不能同時(shí)出現(xiàn)
super可以屏蔽子類(lèi)屬性和父類(lèi)屬性重名時(shí)帶來(lái)的屬性遮蓋,super. 表示調(diào)用父類(lèi)的方法或?qū)傩?br />
在子類(lèi)的構(gòu)造器中如果沒(méi)有指定調(diào)用父類(lèi)的哪一個(gè)構(gòu)造器,那么就會(huì)調(diào)用父類(lèi)的無(wú)參構(gòu)造器,即super()
注意:
父類(lèi)的構(gòu)造器不能被子類(lèi)繼承
方法和屬性可以被繼承,權(quán)限不限制能否繼承過(guò)來(lái),限制的是能否直接訪(fǎng)問(wèn)
先構(gòu)造父類(lèi),后構(gòu)造子類(lèi),先this后super
多態(tài):
多態(tài)分為兩種:編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。
編譯時(shí)類(lèi)型:主觀(guān)概念,把它看作什么。
運(yùn)行時(shí)類(lèi)型:客觀(guān)概念,實(shí)際它是什么。
例:Animal a=new Dog();
指著狗問(wèn),這個(gè)動(dòng)物是什么?
運(yùn)行時(shí)多態(tài)的三原則:
對(duì)象類(lèi)型不變。
只能對(duì)對(duì)象調(diào)用編譯時(shí)類(lèi)型中定義的方法。
在程序的運(yùn)行時(shí),根據(jù)對(duì)象的運(yùn)行時(shí)類(lèi)型,找覆蓋后的方法來(lái)調(diào)用。(運(yùn)行時(shí)動(dòng)態(tài)類(lèi)型綁定)
強(qiáng)制類(lèi)型轉(zhuǎn)換: 一定沒(méi)有新對(duì)象生成。(父類(lèi)的引用賦值給子類(lèi)的引用需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換)
關(guān)鍵字:instanceof
用法:引用 instanceof 類(lèi)名 判斷這個(gè)引用所指向的對(duì)象是否屬于這個(gè)類(lèi)。
用在強(qiáng)制轉(zhuǎn)換之前,避免類(lèi)型轉(zhuǎn)換異常。
if(a instanceof Dog){
Dog d=(Dog)a;
}
多態(tài)的作用:把不同的子類(lèi)對(duì)象都當(dāng)作父類(lèi)來(lái)看,可以屏蔽不同子類(lèi)對(duì)象之間的差異,寫(xiě)出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。
posted on 2008-10-26 21:04
礦礦 閱讀(254)
評(píng)論(0) 編輯 收藏