多個類中存在相同屬性和行為時,將這些內(nèi)容抽取到單獨(dú)一個類 中, 那么多個類無需再定義這些屬性和行為,只要繼承那個類即可
多個類稱為子類(派生類),單獨(dú)的這個類稱為父類(基類或超類)
作用:
繼承的出現(xiàn)減少了代碼冗余,提高了代碼的復(fù)用性
繼承的出現(xiàn),更有利于功能的擴(kuò)展
繼承的出現(xiàn)讓類與類之間產(chǎn)生了關(guān)系,提供了多態(tài)的前提
類繼承語法規(guī)則:
class 子類名 extends 父類名{ }
在子類中可以根據(jù)需要對從父類中繼承來的方法進(jìn)行改造,也稱為方法的重置、覆蓋。在程序執(zhí)行時,子類的方法將覆蓋父類的方法
要求:
子類重寫的方法必須和父類被重寫的方法具有相同的方法名稱、參數(shù)列表
子類重寫的方法的返回值類型不能大于父類被重寫的方法的返回值類型
子類重寫的方法使用的訪問權(quán)限不能小于父類被重寫的方法的訪問權(quán)限
子類不能重寫父類中聲明為private權(quán)限的方法
子類方法拋出的異常不能大于父類被重寫方法的異常
子類與父類中同名同參數(shù)的方法必須同時聲明為非static的(即為重寫),或者同時聲明為 static的(不是重寫)。因?yàn)閟tatic方法是屬于類的,子類無法覆蓋父類的方法
super可用于訪問父類中定義的屬性
super可用于調(diào)用父類中定義的成員方法
super可用于在子類構(gòu)造器中調(diào)用父類的構(gòu)造器
當(dāng)子父類出現(xiàn)同名成員時,可以用super表明調(diào)用的是父類中的成員
super的追溯不僅限于直接父類
this代表本類對象的引用,super代表父類的內(nèi)存空間的標(biāo)識
當(dāng)父類中沒有空參數(shù)的構(gòu)造器時,子類的構(gòu)造器必須通過this(參數(shù)列表)或者super(參數(shù)列表)語句指定調(diào)用本類或者父類中相應(yīng)的構(gòu)造器。同時,只能”二選一” ,且必須放在構(gòu)造器的首行
對象的多態(tài)性:父類的引用指向子類的對象
Java引用變量有兩個類型:編譯時類型和運(yùn)行時類型
編譯時類型由聲明 該變量時使用的類型決定
運(yùn)行時類型由實(shí)際賦給該變量的對象決定
編譯時,看左邊;運(yùn)行時,看右邊
“看左邊” :看的是父類的引用(父類中不具備子類特有的方法)
“看右邊” :看的是子類的對象(實(shí)際運(yùn)行的是子類重寫父類的方法)
子類中定義了與父類同名同參數(shù)的方法,在多態(tài)情況下,將此時父類的方法稱為虛擬方法,父類根據(jù)賦給它的不同子類對象,動態(tài)調(diào)用屬于子類的該方法。這樣的方法調(diào)用在編譯期是無法確定的
Person e = new Student();e.getInfo(); //調(diào)用Student類的getInfo()方法
x instanceof A:檢驗(yàn)x是否為類A的對象,返回值為boolean型
自動類型轉(zhuǎn)換:小的數(shù)據(jù)類型可以自動轉(zhuǎn)換成大的數(shù)據(jù)類型
強(qiáng)制類型轉(zhuǎn)換:可以把大的數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換(casting)成小的數(shù)據(jù)類型
int a=(int)1200L;
對Java對象的強(qiáng)制類型轉(zhuǎn)換稱為造型
從子類到父類的類型轉(zhuǎn)換可以自動進(jìn)行
從父類到子類的類型轉(zhuǎn)換必須通過造型(強(qiáng)制類型轉(zhuǎn)換)實(shí)現(xiàn)
無繼承關(guān)系的引用類型間的轉(zhuǎn)換是非法的
在造型前可以使用instanceof操作符測試一個對象的類型
Object類是所有Java類的根父類
如果在類的聲明中未使用extends關(guān)鍵字指明其父類,則默認(rèn)父類為java.lang.Object類
method(Object obj){…} //可以接收任何類作為其參數(shù)
==:
基本類型比較值:只要兩個變量的值相等,即為true
引用類型比較引用(是否指向同一個對象):只有指向同一個對象時,==才返回true
用“==”進(jìn)行比較時,符號兩邊的數(shù)據(jù)類型必須兼容(可自動轉(zhuǎn)換的基本數(shù)據(jù)類型除外),否則編譯出錯
equals():可以重寫
只能比較引用類型,其作用與“==”相同,比較是否指向同一個對象
格式:obj1.equals(obj2)
當(dāng)用equals()方法進(jìn)行比較時,對類File、String、Date及包裝類 (Wrapper Class)來說,是比較類型及內(nèi)容而不考慮引用的是否是同一個對象
原因:在這些類中重寫了Object類的equals()方法
任何情況下,x.equals(null),永遠(yuǎn)返回是“false”
toString()方法在Object類中定義,其返回值是String類型,返回類名和它的引用地址
在進(jìn)行String與其它類型數(shù)據(jù)的連接操作時,自動調(diào)用toString()方法
基本類型數(shù)據(jù)轉(zhuǎn)換為String類型時,調(diào)用了對應(yīng)包裝類的toString()方法
針對八種基本數(shù)據(jù)類型定義相應(yīng)的引用類型—包裝類(封裝類)
JDK1.5之后,支持自動裝箱,自動拆箱。但類型必須匹配
基本數(shù)據(jù)類型包裝成包裝類的實(shí)例 ---裝箱
int i = 500; Integer t = new Integer(i);Long l = new Long(“asdf”); //NumberFormatException
獲得包裝類對象中包裝的基本類型變量 ---拆箱
//調(diào)用包裝類的.xxxValue()方法:boolean b = bObj.booleanValue();
字符串轉(zhuǎn)換成基本數(shù)據(jù)類型
//通過包裝類的構(gòu)造器實(shí)現(xiàn):int i = new Integer(“12”);// 通過包裝類的parseXxx(String s)靜態(tài)方法:Float f = Float.parseFloat(“12.1”);
基本數(shù)據(jù)類型轉(zhuǎn)換成字符串
//調(diào)用字符串重載的valueOf()方法:String fstr = String.valueOf(2.34f);// 更直接的方式:String intStr = 5 + “”;
聯(lián)系客服