?? day03.txt
字號(hào):
類和對(duì)象:
類:主觀抽象,是對(duì)象的模板,可以實(shí)例化對(duì)象
習(xí)慣上類的定義格式:
package xxx;
import xxx;
public class Xxxx{
屬性 ······;
構(gòu)造器 ······;
方法 ······;
}
定義屬性:實(shí)例變量
格式:[ 修飾符 ] 類型 變量名 [ = ? ]
實(shí)例變量定義在類中但在任何方法之外。
實(shí)例變量有默認(rèn)值:各種各樣的0。(同數(shù)組)
實(shí)例變量的作用域至少在本類內(nèi)部,受訪問(wèn)控制符的限制。
在重合作用域,實(shí)例變量和局部變量允許有命名沖突,“局部?jī)?yōu)先”。
定義方法:
格式: [ 修飾符 ] 返回類型 方法名( 參數(shù)列表 ) [ throws 異常 ] { ······ }
java中所有參數(shù)都是值傳遞。
當(dāng)沒(méi)有值返回時(shí),返回類型必須被定義為void。
返回類型必須與方法名相鄰,其他修飾符可以調(diào)換位置。
構(gòu)造器:
在創(chuàng)建對(duì)象的過(guò)程中調(diào)用的方法。
構(gòu)造器沒(méi)有返回類型。
構(gòu)造器的名字與類名相同。
格式為:[ 修飾符 ] 類名( 參數(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 類名(),可以通過(guò)這種形式或的一個(gè)對(duì)象,這時(shí)的對(duì)象是無(wú)法使用,必須把他的地址存放進(jìn)一個(gè)對(duì)象變量才能夠使用。
例如 :
Car c=new Car();
注意:
最好在寫類時(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)用同一類中的其他構(gòu)造方法。
注意:
在構(gòu)造器中this(...)必須放在該構(gòu)造器的第一行。
this不能出現(xiàn)在靜態(tài)方法里面
類、對(duì)象、實(shí)例三者的關(guān)系:
類:是對(duì)象的模板,可以實(shí)例化對(duì)象
對(duì)象:類的個(gè)體
實(shí)例:實(shí)現(xiàn)的對(duì)象
student s;
s=new student();
其中 Student為類,s為對(duì)象,new Student()為實(shí)例,s賦值后也是實(shí)例了。
方法重載:
方法名相同,參數(shù)表不同,不考慮返回值類型(但最好還是使返回類型一致)。
編譯器根據(jù)參數(shù),選擇一個(gè)方法,如果沒(méi)有完全匹配的,對(duì)于參數(shù)表采用“向上就近匹配原則”,但不允許模棱兩可。
方法重載屏蔽了一個(gè)對(duì)象的同一類方法由于參數(shù)不同所造成的差異。
封裝:
類的屬性加private修飾符,來(lái)限制只能夠在類的內(nèi)部進(jìn)行訪問(wèn),有效的保護(hù)數(shù)據(jù)。
對(duì)于類中的私有屬性,要對(duì)其給出一對(duì)方法getXxx(),setXxx()訪問(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)隱藏的隱藏。
繼承:
父類到子類是從一般到特殊的關(guān)系。
泛化:將不同子類中的共性抽象成父類的過(guò)程。
特化:在原有父類的基礎(chǔ)上加入一些個(gè)性的過(guò)程。
原則:父類放共性,子類放個(gè)性。
繼承的關(guān)鍵字:extends
Java只支持單繼承:一個(gè)類最多只有一個(gè)直接的父類。
方法覆蓋:
方法名:相同
參數(shù)表:相同
訪問(wèn)限制符:相同或者更寬
返回值類型:相同或者子類返回的類型是父類返回的類型的子類(在JDK5.0以后)
拋出的異常:不能比父類更寬。
super關(guān)鍵字:
super()表示調(diào)用父類的構(gòu)造器
super()也和this()一樣必須放在方法的第一句
super()和this()不能同時(shí)出現(xiàn)
super可以屏蔽子類屬性和父類屬性重名時(shí)帶來(lái)的屬性遮蓋,super. 表示調(diào)用父類的方法或?qū)傩? 在子類的構(gòu)造器中如果沒(méi)有指定調(diào)用父類的哪一個(gè)構(gòu)造器,那么就會(huì)調(diào)用父類的無(wú)參構(gòu)造器,即super()
注意:
父類的構(gòu)造器不能被子類繼承
方法和屬性可以被繼承,權(quán)限不限制能否繼承過(guò)來(lái),限制的是能否直接訪問(wèn)
先構(gòu)造父類,后構(gòu)造子類,先this后super
多態(tài):
多態(tài)分為兩種:編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。
編譯時(shí)類型:主觀概念,把它看作什么。
運(yùn)行時(shí)類型:客觀概念,實(shí)際它是什么。
例:Animal a=new Dog();
指著狗問(wèn),這個(gè)動(dòng)物是什么?
運(yùn)行時(shí)多態(tài)的三原則:
對(duì)象類型不變。
只能對(duì)對(duì)象調(diào)用編譯時(shí)類型中定義的方法。
在程序的運(yùn)行時(shí),根據(jù)對(duì)象的運(yùn)行時(shí)類型,找覆蓋后的方法來(lái)調(diào)用。(運(yùn)行時(shí)動(dòng)態(tài)類型綁定)
強(qiáng)制類型轉(zhuǎn)換: 一定沒(méi)有新對(duì)象生成。(父類的引用賦值給子類的引用需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換)
關(guān)鍵字:instanceof
用法:引用 instanceof 類名 判斷這個(gè)引用所指向的對(duì)象是否屬于這個(gè)類。
用在強(qiáng)制轉(zhuǎn)換之前,避免類型轉(zhuǎn)換異常。
if(a instanceof Dog){
Dog d=(Dog)a;
}
多態(tài)的作用:把不同的子類對(duì)象都當(dāng)作父類來(lái)看,可以屏蔽不同子類對(duì)象之間的差異,寫出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -