




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Java面向?qū)ο罂偨Y(jié)面向?qū)ο蟮娜蠡咎卣鳎豪^承性,封裝性,多態(tài)性一、關(guān)于java面向?qū)ο蟾拍畹睦斫鈩e人問你對(duì)象是什么,類是什么?你會(huì)怎么回答?對(duì)于基本概念,自己的心里要有一個(gè)思路要了解對(duì)象要先知道類,引用一句書本的概念:類用于描述客觀世界里某一類對(duì)象的共同特征,而對(duì)象則是類的具體存在。所以你的回答可以是:許多對(duì)象的共同特征的抽象概念就是類,而對(duì)象則是類的具體存在。用代碼來,解釋一下:比如People類,有類成員:變量name和方法eat();這里的People類只是一個(gè)抽象的概念,不能有實(shí)際的行為,這時(shí)候就需要實(shí)例化對(duì)象來表現(xiàn)實(shí)際的行為。實(shí)例化:People xiaoming=new Peo
2、ple();怎么理解這個(gè)表達(dá)式呢?左邊是實(shí)例化還是右邊是實(shí)例化呢?其實(shí)右邊才是實(shí)例化,然后把實(shí)例化的東西,賦值給左邊的People類對(duì)象然后就有了People類的實(shí)例化對(duì)象xiaoming對(duì)象就可以有實(shí)際行為了: = ”小明 ”;xiaoming.eat() ;這里實(shí)例化就會(huì)運(yùn)行類的構(gòu)造方法,比如你在另一個(gè)類的方法里面只編寫new People(),即使沒有賦值對(duì)象,也會(huì)運(yùn)行People里面的構(gòu)造方法,重寫一下People的構(gòu)造方法,并在里面輸出一句話,運(yùn)行,就可以看到輸出的語句。借助網(wǎng)上一個(gè)例子解釋,面向?qū)ο蟮乃枷耄核^面向?qū)ο?,書上說的都是關(guān)于對(duì)象的概念,這東西很
3、抽象,難以理解,很簡單的一個(gè)思路,如,我要木頭,從建材市場這個(gè)對(duì)象拿,調(diào)用建材市場這個(gè)對(duì)象中出售木頭這個(gè)方法,返回我一個(gè)木頭。至于建材市場的木頭哪來的,我不知道,也不用知道,這個(gè)社會(huì)有各行各業(yè),他們?nèi)际菍?duì)象,都有一個(gè)方法,返回該職業(yè)能返回給社會(huì)的事物,之所以說面向?qū)ο蟾咏谌说恼K季S,妙處就在這,我們把能拿到我們想要的東西的出處抽取成一個(gè)對(duì)象,我們直接訪問它,拿到我們要的東西,它又從它該拿到東西的對(duì)象處拿東西,看似互不相干,卻又有很多關(guān)系,這就是面向?qū)ο?,記住,每一個(gè)對(duì)象,一個(gè)方法,只做它自己該做的事,其他的,交給其他的方法,其他的對(duì)象,層次理清楚,你能寫出很棒的程序。二、面向?qū)ο笾R(shí)點(diǎn)
4、總結(jié)面向?qū)ο笾饕膬?nèi)容:類和對(duì)象的關(guān)系,封裝(機(jī)箱故事),繼承,多態(tài),構(gòu)造函數(shù),this,supper,static,內(nèi)部類(用處很少),抽象類,接口面向?qū)ο笫且环N思想,能讓復(fù)雜的問題簡單化,讓我們角色從執(zhí)行者變成指揮者,不要知道過程,只要知道結(jié)果。(一切皆對(duì)象。)對(duì)象的特點(diǎn)在于封裝數(shù)據(jù),數(shù)據(jù)包含著屬性和行為。一般一個(gè)程序可以由很多個(gè)類組成,也可以有多個(gè)主函數(shù),但一般有一個(gè)主函數(shù)就可以。格式:引用類名 對(duì)象名=new 構(gòu)造函數(shù)名(參數(shù));例:class DuiXiang則建立對(duì)象為:DuiXiang mingZi=new DuiXiang();如果要實(shí)現(xiàn)功能,則格式為:mingZi。變量或函數(shù)
5、名(); 面向?qū)ο笾庋b函數(shù)是最小的封裝體。類也是一個(gè)封裝體。private:私有的,權(quán)限修飾符,用來修飾類中的成員(成員變量 、成員函數(shù)),其只在本類中有效。每個(gè)成員變量通常都會(huì)對(duì)應(yīng)兩個(gè)訪問方式:一個(gè)設(shè)置,一個(gè)獲取。注意:私有僅是封裝的一種表現(xiàn)形式。因?yàn)檎Z句都必須在函數(shù)內(nèi),所以,私有化后,再提供訪問方式,就可以在訪問方式的函數(shù)內(nèi)實(shí)現(xiàn)變量控制。這樣就提高代碼的健壯性。一般進(jìn)行封裝,要對(duì)類中的大部分屬性都隱藏,最低權(quán)限是private。類里有一個(gè)setXxx函數(shù)(一般返回值是void,保存數(shù)據(jù),要帶參數(shù))和getXxx函數(shù)(有返回值類型,但一般沒參數(shù),getXxx之后一般用一個(gè)變量來接收:str
6、ing x=p.getXxx),那代表一定有一個(gè)私有化屬性。成員變量都有初始化值, 局部變量可以沒有。舉例:class XueShengprivate String name;public void setName(String name)/這個(gè)函數(shù)方便以后賦值=name;public String getName()/這個(gè)函數(shù)是方便以后有需要調(diào)用的,比如以后要打印name的值return name;構(gòu)造函數(shù):函數(shù)名與類名一致,不用返回值類型,不可以用return,主要用來初始化對(duì)象。對(duì)象一建立,就默認(rèn)調(diào)用其構(gòu)造函數(shù)。一個(gè)對(duì)象一建立,就有其默認(rèn)的屬性和行為。(如一個(gè)人剛出生就
7、會(huì)呼吸,哭.)。如果我們沒有指認(rèn),那么類建立就會(huì)默認(rèn)建一個(gè)構(gòu)造函數(shù)(類名(),不然對(duì)象無法初始化,也就無法建立。(注意:只要我們有重寫,那么就不會(huì)使用默認(rèn)的建構(gòu)造函數(shù))其與普通函數(shù)的區(qū)別除了寫法上之外:1,構(gòu)造函數(shù)只在對(duì)象建立時(shí)運(yùn)行一次,不再運(yùn)行了,而普通函數(shù)可以調(diào)用多次,另外,構(gòu)造函數(shù)是用來初始化對(duì)象的,而一般方法是用來添加對(duì)象具備的功能。何時(shí)我們要手動(dòng)添加構(gòu)造函數(shù):當(dāng)我們分析事物時(shí),該事物存在一些特性或行為,那么我們就給其定義一個(gè)構(gòu)造函數(shù),如果有變量參與運(yùn)算,那么我們就給構(gòu)造函數(shù)定義一個(gè)參數(shù)。構(gòu)造函數(shù)寫法舉例:class PersonPerson(String name,int age)/
8、注意:在新建一個(gè)對(duì)象時(shí)要加上參數(shù)進(jìn)行區(qū)分,因?yàn)橐粋€(gè)類可以放很多個(gè)構(gòu)造方法。/比如調(diào)用方式:Person p =new Person("fada",20)/構(gòu)造函數(shù)已經(jīng)被重寫了,默/認(rèn)的構(gòu)造方法已經(jīng)不存在了,再調(diào)用 Person p=new Person();會(huì)報(bào)錯(cuò) = name;this.age = age;初始化代碼塊:(不怎么用)1,所有對(duì)象在建立時(shí)都先執(zhí)行構(gòu)造代碼塊初始化,再執(zhí)行構(gòu)造函數(shù)初始化。2,作用:當(dāng)所有對(duì)象有共性時(shí),那么就可以定義一個(gè)構(gòu)造代碼塊(例如:所有小孩先出來就是哭,然后才有其它的屬性)構(gòu)造代碼塊的寫法(就是在類里面用一個(gè)大括號(hào))舉例:
9、class PersonSystem.out.print("fada")/這樣一寫,那么以后每次建立一個(gè)構(gòu)造函數(shù)時(shí)便先初始化這個(gè)構(gòu)造代碼塊this關(guān)鍵字的用法This在類中就是三個(gè)代表:代表對(duì)象的成員變量,在函數(shù)中代表對(duì)象調(diào)用函數(shù),代表類中的構(gòu)造函數(shù)。格式:this.變量=變量;this是用來區(qū)分局部變量和成員變量同名時(shí)的關(guān)鍵字,因?yàn)槿绻跇?gòu)造函數(shù)里比如(name=name),那么其是賦值給他本身,而不是賦值給類里面的name。何是用this?當(dāng)定義類中的函數(shù)時(shí),需要調(diào)用該函數(shù)的對(duì)象時(shí),這個(gè)時(shí)候就用this來表示這個(gè)對(duì)象。但凡本類功能內(nèi)部使用到了本類對(duì)象,用this表示???/p>
10、到this就是有代表對(duì)象,代表哪個(gè)對(duì)象就看其所在功能被哪個(gè)對(duì)象調(diào)用。這樣就知道誰在參與運(yùn)算。例:class Personprivate String name;Person(String name) = name;/=;class PersonDemo3 public static void main(String args) Person p1 = new Person("fada");this的應(yīng)用之定義類中函數(shù)的調(diào)用:當(dāng)定義類中功能時(shí),該函數(shù)內(nèi)部要用到調(diào)用該函數(shù)的對(duì)象時(shí),這時(shí)用this來表示這個(gè)對(duì)象。但凡本類功能內(nèi)部使
11、用了了本類對(duì)象,都用this表示。例:class Personprivate String name;Person(String name) = name;/=;this.fada();/其實(shí)就=p1.fada();/這里寫這p1是因?yàn)閜1這個(gè)對(duì)象在調(diào)用這個(gè)函數(shù)。一句話,誰調(diào)用它就在代表誰。private int age;Person(int age)this.age = age;public void fada()System.out.println("fada");/*需求:給人定義一個(gè)用于比較年齡是否相同的功能。也就是
12、是否是同齡人。*/public boolean compare(Person p) return this.age=p.age;class PersonDemopublic static void main(String args) Person p1 = new Person(20);Person p2 = new Person(25);/因?yàn)槭莾蓚€(gè)人比,所以要先建立兩人的對(duì)象boolean b = pare(p2);/這里定義了一個(gè)布爾型變量去接收p1調(diào)用compare函數(shù)的值System.out.println(b);另一種this用法:格式this(變量)用于構(gòu)造函數(shù)間的相互調(diào)用,而且
13、只能放在構(gòu)造函數(shù)的第一行。然后先初始化其this調(diào)用的構(gòu)造函數(shù),再初始化本身的構(gòu)造函數(shù)。其實(shí)this(變量);=new 構(gòu)造函數(shù)名(變量);(因?yàn)樗袠?gòu)造函數(shù)名是一樣的,都是重載函數(shù),所以,通過變量來標(biāo)記構(gòu)造函數(shù),用this去引用)例:class Personprivate String name;private int age;Person()System.out.println("person run");Person(String name)This(); =name;二、super super關(guān)鍵和this作用類
14、似,是被屏蔽的成員變量或者成員方法或變?yōu)榭梢姡蛘哒f用來引用被屏蔽的成員變量和成員成員方法。不過super是用在子類中,目的是訪問直接父類中被屏蔽的成員,注意是直接父類(就是類之上最近的超類)。下面是一個(gè)綜合運(yùn)用super的例子,有兩個(gè)類:一個(gè)Father類,一個(gè)Father類的子類Son,通過這兩個(gè)類完全演示了super的用法,一下是代碼: public class Father public String v="Father" public String x="輸出了Father類的public成員變量x!"
15、; public Father() System.out.println("Father構(gòu)造方法被調(diào)用!"); public Father(String v) this.v="Father類的帶參數(shù)構(gòu)造方法!運(yùn)行了." public void outinfo() System.out.println("Father的outinfo方法被調(diào)用"); public stat
16、ic void main(String args) / TODO 自動(dòng)生成方法存根 public class Son extends Father public String v="Son" public Son() super(); /調(diào)用超類的構(gòu)造方法,只能放到第一行. System.out.println("Son無參數(shù)構(gòu)造方法被調(diào)用!"); &
17、#160;/super(); /錯(cuò)誤的,必須放到構(gòu)造方法體的最前面. public Son(String str) super(str); System.out.println("Son帶參數(shù)構(gòu)造方法被調(diào)用!"); /覆蓋了超類成員方法outinfo() public void outinfo() System.out.println("So
18、n的outinfo()方法被調(diào)用"); public void test() String v="哈哈哈哈!" /局部變量v覆蓋了成員變量v和超類變量v System.out.println("-1-"); System.out.println(v); /輸出局部變量v System.out.pri
19、ntln(this.v); /輸出(子類)成員變量v System.out.println(super.v); /輸出超類成員變量v System.out.println("-2-"); System.out.println(x); /輸出超類成員變量v,子類繼承而來 System.out.println(super.x); /輸出超類成員變量v
20、0; System.out.println("-3-"); outinfo(); /調(diào)用子類的outinfo()方法 this.outinfo(); /調(diào)用子類的outinfo()方法 super.outinfo(); /調(diào)用父類的outinfo()方法 public static void main(String args) new Son().test();
21、160; 子類Son運(yùn)行結(jié)果: Father構(gòu)造方法被調(diào)用!Son無參數(shù)構(gòu)造方法被調(diào)用!-1-哈哈哈哈!SonFather-2-輸出了Father類的public成員變量x!輸出了Father類的public成員變量x!-3-Son的outinfo()方法被調(diào)用Son的outinfo()方法被調(diào)用Father的outinfo方法被調(diào)用 說明:例子僅僅為了說明super的用法,實(shí)際在設(shè)計(jì)類的時(shí)候一般都盡可能私有(private)化。 通過上面的例子,
22、下面總結(jié)一下super的用法: 第一、在子類構(gòu)造方法中要調(diào)用父類的構(gòu)造方法,用“super(參數(shù)列表)”的方式調(diào)用,參數(shù)不是必須的。同時(shí)還要注意的一點(diǎn)是:“super(參數(shù)列表)”這條語句只能用在子類構(gòu)造方法體中的第一行。 第二、當(dāng)子類方法中的局部變量或者子類的成員變量與父類成員變量同名時(shí),也就是子類局部變量覆蓋父類成員變量時(shí),用“super.成員變量名”來引用父類成員變量。當(dāng)然,如果父類的成員變量沒有被覆蓋,也可以用“super.成員變量名”來引用父類成員變量,不過這是不必要的。 第三、當(dāng)子
23、類的成員方法覆蓋了父類的成員方法時(shí),也就是子類和父類有完全相同的方法定義(但方法體可以不同),此時(shí),用“super.方法名(參數(shù)列表)”的方式訪問父類的方法。 this、super的用法也不過這些,只有理解了其中的原理,才不會(huì)跌入陷阱!Static(靜態(tài))關(guān)鍵字:static是一個(gè)修飾符:三種修飾:修飾類的變量、方法和構(gòu)造代碼塊。靜態(tài)方法只能直接引用和訪問靜態(tài)變量和方法注意(函數(shù)即方法,對(duì)象也叫實(shí)例)有時(shí)你希望定義一個(gè)類成員,使它的使用完全獨(dú)立于該類的任何對(duì)象。通常情況下,類成員必須通過它的類的對(duì)象訪問,但是可以創(chuàng)建這樣一個(gè)成員,它能夠被它自己使用,而不必引用
24、特定的實(shí)例。在成員的聲明前面加上關(guān)鍵字static(靜態(tài)的)就能創(chuàng)建這樣的成員。如果一個(gè)成員被聲明為static,它就能夠在它的類的任何對(duì)象創(chuàng)建之前被訪問,而不必引用任何對(duì)象。你可以將方法和變量都聲明為static。static 成員的最常見的例子是main( ) 。因?yàn)樵诔绦蜷_始執(zhí)行時(shí)必須調(diào)用main() ,所以它被聲明為static。 聲明為static的變量稱為靜態(tài)變量或類變量??梢灾苯油ㄟ^類名引用靜態(tài)變量,也可以通過實(shí)例名來引用靜態(tài)變量,但最好采用前者,因?yàn)楹笳呷菀谆煜o態(tài)變量和一般變量。靜態(tài)變量是跟類相關(guān)聯(lián)的,類的所有實(shí)例共同擁有一個(gè)靜態(tài)變量。 關(guān)鍵點(diǎn):靜態(tài)變量與實(shí)例變量的區(qū)別:靜態(tài)
25、變量也叫類變量,為所有對(duì)象所共有,所以一個(gè)對(duì)象的變量值改變,那么所有對(duì)象的值一起發(fā)生改變。而實(shí)例變量則是各自獨(dú)立的不受影響。聲明為static的方法稱為靜態(tài)方法或類方法。靜態(tài)方法可以直接調(diào)用靜態(tài)方法,訪問靜態(tài)變量,但是不能直接訪問實(shí)例變量和實(shí)例方法。靜態(tài)方法中不能使用this關(guān)鍵字,因?yàn)殪o態(tài)方法不屬于任何一個(gè)實(shí)例。靜態(tài)方法不能被子類的靜態(tài)方法覆蓋。特有屬性隨著對(duì)象存儲(chǔ)于堆內(nèi)存中,而static修飾后的屬性,存在于方法區(qū).什么時(shí)候使用靜態(tài)修飾符?當(dāng)對(duì)象中出現(xiàn)共享數(shù)據(jù)時(shí),使用靜態(tài)修飾。但對(duì)象內(nèi)的特有數(shù)據(jù)要定義成非靜態(tài)存在于堆內(nèi)存中。而對(duì)于方法時(shí):當(dāng)功能內(nèi)部沒有訪問到非靜態(tài)數(shù)據(jù)時(shí),(即對(duì)象的特有數(shù)據(jù)
26、)那么可以使用靜態(tài)修飾。靜態(tài)代碼塊:用于給類做初始化的。不管有沒有對(duì)象都執(zhí)行,只要調(diào)用了類里面成員或方法,就會(huì)執(zhí)行,而且優(yōu)先于主函數(shù),優(yōu)先執(zhí)行級(jí)別最高。例:class JingTaistatic int age;static String name;static/靜態(tài)代碼塊初始化類的,所以最先運(yùn)行。System.out.println("name="+name);/下面是構(gòu)造代碼塊,第二個(gè)運(yùn)行System.out.println("age="+age);public static void jing(int x)/被對(duì)象調(diào)用,第三個(gè)運(yùn)行。x =age+1
27、;/因?yàn)閍ge是靜態(tài)的,所以能調(diào)用System.out.println("x="+x);class FaDapublic static void main(String args)JingTai p =new JingTai();p.jing(2);繼承繼承就是將兩個(gè)類的共性描述提取出來,單獨(dú)進(jìn)行描述,從而簡化代碼,提高復(fù)用性。格式:class 子類名 extends 父類名關(guān)健字為extends :繼承判斷兩個(gè)類是否有所屬關(guān)系,那么我們就繼承一下,看父類所具有的內(nèi)容屬性,子類是否全都需要具備。如果是,那么他們所屬關(guān)系成立,就是繼承。注意:千萬不要為了獲取其他類的功能,簡化
28、代碼而繼承。必須是類與類之間有所屬關(guān)系才可以繼承。所屬關(guān)系 is a。例如:class A /void demo1()void demo2()class B /void demo1()void demo3()我們可以讓B繼承下A,但發(fā)現(xiàn),A中還具有demo2這個(gè)方法是B所不具備的,所以他們倆的繼承關(guān)系不成立,但我們可以把兩個(gè)類的共性提取出來,成為一個(gè)class Cvoid demo1()那么A和B就能夠繼承C,這樣就實(shí)現(xiàn)在代碼的簡化和復(fù)用。Java語言中:java只支持單繼承,不支持多繼承。因?yàn)槎嗬^承容易帶來安全隱患:當(dāng)多個(gè)父類中定義了相同功能,當(dāng)功能內(nèi)容不同時(shí),子類對(duì)象不確定要運(yùn)行哪一個(gè)。但
29、是java保留這種機(jī)制。并用另一種體現(xiàn)形式來完成表示。多實(shí)現(xiàn)。聚集:事物與事物的另一種關(guān)系,比如(類與類,對(duì)象與對(duì)象)聚合:例如:一個(gè)班里的有很多學(xué)生,那么班級(jí)和學(xué)生就是聚合關(guān)系。就是包含。組合:組合與聚合區(qū)別在于,組合各成員是不可分割的,否則會(huì)缺少功能,但聚合里的成員可以脫離,對(duì)整體沒有影響。子父類出現(xiàn)后,類成員的特點(diǎn):類中成員:1,變量。2,函數(shù)。3,構(gòu)造函數(shù)。1,變量如果子類中出現(xiàn)非私有的同名成員變量時(shí),子類要訪問本類中的變量,用this子類要訪問父類中的同名變量,用super。super的使用和this的使用幾乎一致。this代表的是本類對(duì)象的引用。super代表的是父類對(duì)象的引用。例
30、如:class Fu int num = 4;class Zi extends Fuint num = 5;void show()System.out.println(super.num);/有super對(duì)象調(diào)用函數(shù)打印結(jié)果是4,沒有打印結(jié)果是5子父類中的函數(shù)另一個(gè)特性:函數(shù)的重寫(覆蓋)當(dāng)子類繼承父類,沿襲了父類的功能,這時(shí)不但可以保留父類的功能定義,還可以重寫功能內(nèi)容。覆蓋要注意的關(guān)健點(diǎn):1,子類覆蓋父類,必須保證子類訪問權(quán)限大于等于父類權(quán)限,才可以覆蓋,否則編譯失敗。(權(quán)限修飾符沒設(shè)的時(shí)候?yàn)槟J(rèn)權(quán)限,介于public與private之間。)例如:class Fuvoid show()Sy
31、stem.out.println("fu show");class Zi extends Fuvoid show()System.out.println("java");/這里我即可以改變,也可以增加。增加時(shí)我們不用重寫一遍父類函數(shù)的內(nèi)容,只雖要super.函數(shù)名()就可以。2,靜態(tài)只能覆蓋靜態(tài)。注意:重載:只看同名函數(shù)的參數(shù)列表。重寫:子父類方法要一模一樣。子父類中的構(gòu)造函數(shù)之特點(diǎn):子類中的構(gòu)造函數(shù)會(huì)默認(rèn)調(diào)用父類中的函數(shù)中的默認(rèn)構(gòu)造函數(shù),因?yàn)樽宇惖臉?gòu)造函數(shù)默認(rèn)第一行有一條隱式的語句 super();但有幾個(gè)地方要注意:例:class Fu Fu()注意
32、:如果沒有這一個(gè)空參數(shù)的構(gòu)造函數(shù),但又有我們指認(rèn)的非空參數(shù)的構(gòu)造函數(shù),那么我們知道默認(rèn)那個(gè)空參數(shù)構(gòu)造函數(shù)也不會(huì)生成,這個(gè)時(shí)候子類就會(huì)編譯失敗。這個(gè)時(shí)候就不能讓子類默認(rèn)獲取super();而要指認(rèn)super(x)num= 60;System.out.println("fu run");Fu(int x)System.out.println("fu ."+x);class Zi extends FuZi()super(); /不管父類有幾個(gè)構(gòu)造函數(shù),只要沒有指認(rèn),那么就默認(rèn)這一個(gè)super();/super(4);System.out.println(&qu
33、ot;zi run");Zi(int x)super();super(3);System.out.println("zi."+x);調(diào)用構(gòu)造函數(shù)用super();(括號(hào)里面是參數(shù)),而調(diào)用一般函數(shù)用super.函數(shù)名()一個(gè)構(gòu)造函數(shù)中只能要么有this要么有super,而且必須放在第一行子類中至少會(huì)有一個(gè)構(gòu)造函數(shù)會(huì)訪問父類中的構(gòu)造函數(shù)。extends Object:java中的頂極父類,也就是任何沒標(biāo)明父類的類的默認(rèn)父類。final : “最終”修飾符:1,可以修飾類,函數(shù),變量。2,被final修飾的類不可以被繼承。作用:為了避免被繼承,被子類復(fù)寫功能。3,被f
34、inal修飾的方法不可以被復(fù)寫。4,被final修飾的變量是一個(gè)常量只能賦值一次,既可以修飾成員變量,有可以修飾局部變量。當(dāng)在描述事物時(shí),一些數(shù)據(jù)的出現(xiàn)值是固定的,那么這時(shí)為了增強(qiáng)閱讀性,都給這些值起個(gè)名字。方便于閱讀。而這個(gè)值不需要改變,所以加上final修飾。作為常量:常量的書寫規(guī)范所有字母都大寫,如果由多個(gè)單詞組成,單詞間通過_連接。5,內(nèi)部類定義在類中的局部位置上是,只能訪問該局部被final修飾的局部變量。例如:final int x=4;那么x永遠(yuǎn)等于4,不可以被賦值,就成了常量,之所以不直接定常量,是因?yàn)橐o數(shù)值起個(gè)名,增強(qiáng)閱讀性,以后也好調(diào)用。抽象修飾符,abstract:只能
35、修飾類和方法:特點(diǎn):1,修飾的類不能創(chuàng)建對(duì)象(實(shí)例)。2,修飾的對(duì)象只有功能,沒有內(nèi)容。3,抽象方法和抽象類都必須被abstract關(guān)鍵字修飾,也就是抽象方法一定在抽象類中, 但抽象類不一定要有抽象方法.4,抽象類中的抽象方法要被使用,必須由子類復(fù)寫起所有的抽象方法后,建立子類對(duì)象調(diào)用。如果子類只覆蓋了部分抽象方法,那么該子類還是一個(gè)抽象類。因?yàn)槌橄蠓椒ê统橄箢惗急仨毐籥bstract關(guān)鍵字修飾(如果只復(fù)寫了一個(gè),那么子類必然還繼承了其它的抽象方法,根據(jù)抽象方法必須在抽象類中,則這個(gè)類還是個(gè)抽象類)。應(yīng)用:1,建立不可創(chuàng)建對(duì)象的類。2,如果子類中需要的方法內(nèi)容不一樣,但又同樣都要這么方法,那么
36、就可以創(chuàng)建一個(gè)抽象類。例如:創(chuàng)建一個(gè)學(xué)校成員,有學(xué)生,有老師,都有姓名,年齡,都要上課,但老師上課是教學(xué),學(xué)生上課是學(xué)習(xí)。所以可以這樣寫:class XueXiaoprivate String name;private int age;XueXiao(String name,int age) = name;this.age = age;public abstract void work();/子類需要這個(gè)功能,但內(nèi)容不一樣,所以用抽象。class Student extends EmployeeStudent(String name,int age)super(name,ag
37、e);/直接調(diào)用父類構(gòu)造函數(shù)。public void work()System.out.println("shangke");class LaoShi extends EmployeeLaoShi(String name,int age)super(name,age);/直接調(diào)用父類構(gòu)造函數(shù)。public void work()System.out.println("laoshi");模版方法設(shè)計(jì)模式:什么是模版方法呢?在定義功能時(shí),功能的一部分是確定的,但是有一部分是不確定,而確定的部分在使用不確定的部分,那么這時(shí)就將不確定的部分暴露出去。由該類的子類
38、去完成。abstract class GetTimepublic final void getTime()/這個(gè)類是不需要改變的,所以就用final最終修飾。long start = System.currentTimeMillis();runcode();long end = System.currentTimeMillis();System.out.println("毫秒:"+(end-start);public abstract void runcode();/這個(gè)函數(shù)主體要設(shè)成不確定,這樣記算任何函數(shù)的運(yùn)行時(shí)間:我只要把要算的函數(shù)定義成這個(gè)的內(nèi)容就行了。所以設(shè)成抽象
39、類的方法。class SubTime extends GetTimepublic void runcode()for(int x=0; x<4000; x+)System.out.print(x);要調(diào)用計(jì)時(shí)這個(gè)功能,我們就在要在類中新健一個(gè)SubTime的對(duì)象。再調(diào)用getTime函數(shù)的就可以(SubTime類繼承了父類,所以有g(shù)etTime函數(shù)。)接口:接口:初期理解,可以認(rèn)為是一個(gè)特殊的抽象類當(dāng)抽象類中的方法都是抽象的,那么該類可以通過接口的形式來表示。class用于定義類關(guān)健字:interface 用于定義接口。接口定義時(shí),格式特點(diǎn):1,接口中常見定義:常量,抽象方法。2,接口中
40、的成員都有固定修飾符,(不寫也會(huì)自動(dòng)生成)。常量:public static final方法:public abstract 記?。航涌谥械某蓡T都是public的。接口:是不可以創(chuàng)建對(duì)象的,因?yàn)橛谐橄蠓椒?。需要被子類?shí)現(xiàn),子類對(duì)接口中的抽象方法全都覆蓋后,子類才可以實(shí)例化。否則子類是一個(gè)抽象類。原因和抽象類一樣,有抽象則為抽象類。接口可以被類多實(shí)現(xiàn),也是對(duì)多繼承不支持的轉(zhuǎn)換形式。java支持多實(shí)現(xiàn)。1,類可以實(shí)現(xiàn)多個(gè)接口,用關(guān)健字:implements 如:class Test implements JieKou,JieKou22,類繼承后,仍可以實(shí)現(xiàn)多個(gè)接口,如:class Test ext
41、ends Demo implements JieKou,JieKou23,接口在可以實(shí)現(xiàn)多繼承,如:interface Test extends A,B例:abstract class Studentabstract void study();學(xué)生都要學(xué)習(xí),所以可以作為父類來給子類繼承。interface Smokingvoid smoke();/抽煙不是所有學(xué)生都會(huì),所以,不可以繼承,不然所有學(xué)生都抽煙了,所以定義為接口,讓需要的類實(shí)現(xiàn)就行。class ZhangSan extends Student implements Smoking/繼承后再實(shí)現(xiàn),這樣就實(shí)現(xiàn)了功能的擴(kuò)展。void st
42、udy()public void smoke()/記得要復(fù)寫,因?yàn)楦割愂浅橄蟮?。class Lisi extends Student void study()System.out.prtintln("study")多態(tài):1,多態(tài)的體現(xiàn)父類的引用指向了自己的子類對(duì)象。父類的引用也可以接收自己的子類對(duì)象。2,多態(tài)的前提必須是類與類之間有關(guān)系。要么繼承,要么實(shí)現(xiàn)。通常還有一個(gè)前提:存在覆蓋。3,多態(tài)的好處多態(tài)的出現(xiàn)大大的提高程序的擴(kuò)展性。4,多態(tài)的弊端:提高了擴(kuò)展性,但是只能使用父類的引用訪問父類中的成員。 如何要訪問子類特有對(duì)象必須強(qiáng)制轉(zhuǎn)換為子類對(duì)象。abstract clas
43、s Animalabstract void eat();class Cat extends Animalpublic void eat()多態(tài)還有一個(gè)前提:存在覆蓋。不然沒有意義,只是繼承了一個(gè)空方法。System.out.println("吃魚");public void catchMouse()但是只能使用父類的引用訪問父類中的成員。因?yàn)楦割愔胁]有catchMouse方法,所以多態(tài)無法實(shí)現(xiàn)catchMouseSystem.out.println("抓老鼠");class Dog extends Animalpublic void eat()Syst
44、em.out.println("吃骨頭");public static void function(Animal a)/Animal a = new Cat();父類的引用指向了自己的子類對(duì)象。父類的引用也可以接收自己的子類對(duì)象。前題:必須是類與類之間有關(guān)系。要么繼承,要么實(shí)現(xiàn)。Animal是動(dòng)物,Cat是它的子類。a.eat();class DuoTaiDemo public static void main(String args) function(new Cat();function(new Dog();提高了擴(kuò)展性,不用再去新建一個(gè)對(duì)象,再引用對(duì)象的功能。繼承何為
45、繼承,有何作用繼承就是將兩個(gè)類的共性描述提取出來,單獨(dú)進(jìn)行描述,從而簡化代碼,提高復(fù)用性。格式:class 子類名 extends 父類名關(guān)健字為extends :繼承判斷兩個(gè)類是否有所屬關(guān)系,那么我們就繼承一下,看父類所具有的內(nèi)容屬性,子類是否全都需要具備。如果是,那么他們所屬關(guān)系成立,就是繼承。注意:千萬不要為了獲取其他類的功能,簡化代碼而繼承。必須是類與類之間有所屬關(guān)系才可以繼承。所屬關(guān)系 is a。例如:class A /void demo1()void demo2()class B /void demo1()void demo3()我們可以讓B繼承下A,但發(fā)現(xiàn),A中還具有demo2這
46、個(gè)方法是B所不具備的,所以他們倆的繼承關(guān)系不成立,但我們可以把兩個(gè)類的共性提取出來,成為一個(gè)class Cvoid demo1()那么A和B就能夠繼承C,這樣就實(shí)現(xiàn)在代碼的簡化和復(fù)用。Java語言中:java只支持單繼承,不支持多繼承。因?yàn)槎嗬^承容易帶來安全隱患:當(dāng)多個(gè)父類中定義了相同功能,當(dāng)功能內(nèi)容不同時(shí),子類對(duì)象不確定要運(yùn)行哪一個(gè)。但是java保留這種機(jī)制。并用另一種體現(xiàn)形式來完成表示。多實(shí)現(xiàn)。java支持多層繼承。也就是一個(gè)繼承體系如何使用一個(gè)繼承體系中的功能呢?想要使用體系,先查閱體系父類的描述,因?yàn)楦割愔卸x的是該體系中共性功能。通過了解共性功能,就可以知道該體系的基本功能。那么這個(gè)
47、體系已經(jīng)可以基本使用了。那么在具體調(diào)用時(shí),要?jiǎng)?chuàng)建最子類的對(duì)象,為什么呢?一是因?yàn)橛锌赡芨割惒荒軇?chuàng)建對(duì)象,二是創(chuàng)建子類對(duì)象可以使用更多的功能,包括基本的也包括特有的。簡單一句話:查閱父類功能,創(chuàng)建子類對(duì)象使用功能。Object類:是所有對(duì)象的直接后者間接父類.該類中定義的是所有對(duì)象都具備的功能。如果自定義類中需要的功能是Object含有的,那么沒有必要重新定義,只要沿襲父類中的功能,建立自己特有比較內(nèi)容,覆蓋即可。常用的有比較功能:public boolean equals(Object obj)/這里要是Object對(duì)象,所以這里相當(dāng)于:Object obj =new 自定義類().這里寫其自
48、定義的內(nèi)容,如果這里要有自定義類里的特有功能,那么要強(qiáng)轉(zhuǎn)對(duì)象格式是:自定義類 x = (自定義類)obj;下面有些只是應(yīng)用較少,或者涉及到的知識(shí)會(huì)有點(diǎn)復(fù)雜,可以根據(jù)自己的興趣了解。內(nèi)部類(應(yīng)用中很少用,不詳細(xì)講解)特點(diǎn):1,內(nèi)部類可以直接訪問外部類中的成員,包括私有。 (原因:內(nèi)部類中持有了一個(gè)外部類的引用,格式:外部類名.this) 2,外部類要訪問內(nèi)部類,必須建立內(nèi)部類對(duì)象。 3, 當(dāng)內(nèi)部類在成員位置上,就可以被成員修飾符所修飾。匿名內(nèi)部類: (應(yīng)用中很少用,不詳細(xì)講解)特點(diǎn):1,匿名內(nèi)部類其實(shí)就是內(nèi)部類的簡寫格式。2,定義匿名內(nèi)部類的前提:內(nèi)部類必須是繼承一個(gè)類或者實(shí)現(xiàn)接口。3,匿名內(nèi)部
49、類的格式: new 父類或者接口()定義子類的內(nèi)容4,其實(shí)匿名內(nèi)部類就是一個(gè)匿名子類對(duì)象。而且這個(gè)對(duì)象有點(diǎn)胖??梢岳斫鉃閹?nèi)容的對(duì)象。5,匿名內(nèi)部類中定義的方法最好不要超過3個(gè)。異常:把程序運(yùn)行中出的問題通過java的類的形式進(jìn)行描述,并封裝成對(duì)象,這個(gè)對(duì)象的體現(xiàn)就是異常.好處在于:將問題進(jìn)行封裝,從而將正常流程代碼和問題處理代碼相分離,方便于閱讀。異常有兩種,嚴(yán)重的和不嚴(yán)重的。對(duì)于嚴(yán)重的,java通過Error類進(jìn)行描述。對(duì)于Error一般不編寫針對(duì)性的代碼對(duì)其進(jìn)行處理。對(duì)與非嚴(yán)重的,java通過Exception類進(jìn)行描述。對(duì)于Exception可以使用針對(duì)性的處理方式進(jìn)行處理。無論Err
50、or或者Exception都具有一些共性內(nèi)容。比如:不正常情況的信息,引發(fā)原因等。Throwable|-Error|-Exception2,異常的處理java 提供了特有的固定語句進(jìn)行處理。try需要被檢測的代碼;catch(異常類 變量)處理異常的代碼;(處理方式)finally/這句可以沒有。一定會(huì)執(zhí)行的語句;通常用于關(guān)閉資源。(不管用了return,還是continue,還是break,其都會(huì)運(yùn)行。注意:當(dāng)你在捕獲到異常的處理代碼里加上:System.exit(0);這樣的話finally的代碼塊 是不會(huì)執(zhí)行的。捕獲異常的規(guī)則是盡量優(yōu)先捕獲具體的異常。System.exit(0)和Sys
51、tem.exit(1)什么區(qū)別? 凡是非零都表示異常退出!0表示正常退出!)3,對(duì)捕獲到的異常對(duì)象進(jìn)行常見方法操作。String getMessage():獲取異常信息。在函數(shù)上聲明異常。便于提高安全性,讓調(diào)用出進(jìn)行處理。不處理編譯失敗對(duì)多異常的處理。1,聲明異常時(shí),建議聲明更為具體的異常。這樣處理的可以更具體。2,對(duì)方聲明幾個(gè)異常,就對(duì)應(yīng)有幾個(gè)catch塊。不要定義多余的catch塊。如果多個(gè)catch塊中的異常出現(xiàn)繼承關(guān)系,父類異常catch塊放在最下面。建立在進(jìn)行catch處理時(shí),catch中一定要定義具體處理方式。不要簡單定義一句 e.printStackTrace(),也不要簡單的就
52、書寫一條輸出語句。自定義異常:必須是自定義類繼承Exception,因?yàn)楫惓sw系有一個(gè)特點(diǎn)就是異常類和異常對(duì)象都被拋出,他們要具備可拋性,而這個(gè)可拋性是Throwable這個(gè)體系中獨(dú)有特點(diǎn)。只有這個(gè)體系中的類和對(duì)象才可以被throws和throw操作,二者區(qū)別是:throws使用在函數(shù)上用,用來拋出異常,告訴調(diào)用者這里有可能會(huì)出現(xiàn)異常。throw使用在函數(shù)內(nèi)用來拋出異常對(duì)象讓調(diào)用者處理。 throws后面跟的異常類??梢愿鄠€(gè)。用逗號(hào)隔開。throw后跟的是異常對(duì)象。Exceptoin中有一個(gè)特殊的子類異常RuntimeException: 運(yùn)行時(shí)異常。 如果在函數(shù)內(nèi)容拋出該異常,函數(shù)上可以不
53、用聲明,編譯一樣通過。 如果在函數(shù)上聲明了該異常。調(diào)用者可以不用進(jìn)行處理。編譯一樣通過;之所以不用在函數(shù)聲明,是因?yàn)椴恍枰屨{(diào)用者處理,當(dāng)該異常發(fā)生,希望程序停止,對(duì)代碼進(jìn)行修正。自定義異常時(shí),如果該異常的發(fā)生,無法處理讓其再繼續(xù)進(jìn)行運(yùn)算,必須修正代碼,就讓自定義異常繼承RuntimeException,如可以處理,則繼承Exception。對(duì)于異常分兩種:1,編譯時(shí)被檢測的異常,那么不要么就catch處理它,不然就必須聲名。2,編譯時(shí)不被檢測的異常(運(yùn)行時(shí)異常。RuntimeException以及其子類)。應(yīng)用舉例:人用電腦辦公。 比如問題是電腦藍(lán)屏:重啟可以修正錯(cuò)誤,繼續(xù)上班,則繼承Exc
54、eption停電了:無法修正錯(cuò)誤,只能停下來等電力供應(yīng)恢復(fù)。要對(duì)問題進(jìn)行描述,封裝成對(duì)象。class LanPingException extends ExceptionLanPingException(String message)super(message);/直接調(diào)用父類方法,用來返回此 throwable 的詳細(xì)消息字符串class TingDianException extends RuntimeExceptionTingDianException(String message)super(message);class Computerprivate int state = 2;public void run()throws LanPingExceptionif(state=2)throw new LanPingException("藍(lán)屏了");if(state=3)throw new TingDianException(" 停電了");System.out.println("電腦運(yùn)行");public void reset()state = 1;System.out.prin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年國際化教育中跨文化交流能力培養(yǎng)的跨文化教育政策創(chuàng)新研究報(bào)告
- 城市生活垃圾分類公眾參與機(jī)制優(yōu)化與長效管理效果評(píng)估分析研究報(bào)告
- 2025年醫(yī)院電子病歷系統(tǒng)在醫(yī)院信息化建設(shè)中的知識(shí)圖譜構(gòu)建應(yīng)用報(bào)告
- 2025年互聯(lián)網(wǎng)醫(yī)療平臺(tái)在線問診服務(wù)與患者疾病管理報(bào)告
- 海洋生態(tài)保護(hù)與修復(fù)2025:政策法規(guī)與海洋生態(tài)修復(fù)技術(shù)標(biāo)準(zhǔn)應(yīng)用分析報(bào)告
- 咨詢工程師付子健課件
- 2025年海上風(fēng)能資源評(píng)估與深遠(yuǎn)海風(fēng)電場技術(shù)交流與合作平臺(tái)報(bào)告
- 2025年福建省廈門市雙十中學(xué)英語八年級(jí)第二學(xué)期期末檢測試題含答案
- 數(shù)字文化產(chǎn)業(yè)發(fā)展報(bào)告:2025年商業(yè)模式創(chuàng)新與文化產(chǎn)業(yè)發(fā)展與文化產(chǎn)業(yè)創(chuàng)新
- 2025年教育信息化基礎(chǔ)設(shè)施建設(shè)與教育信息化產(chǎn)業(yè)創(chuàng)新趨勢研究報(bào)告
- 垃圾焚燒發(fā)電行業(yè)潤滑
- 鋁合金門窗安裝施工方案
- 采血后預(yù)防淤青的按壓方式
- 胃癌化療患者的護(hù)理查房
- 香菇種植可行性分析報(bào)告
- 2025年會(huì)考地理考試試題及答案
- 2025-2030全球智慧康養(yǎng)平臺(tái)行業(yè)調(diào)研及趨勢分析報(bào)告
- 安全生產(chǎn)網(wǎng)格員培訓(xùn)
- 醫(yī)院預(yù)防職務(wù)犯罪講座
- 食品安全主題墻框架
- 吸脂術(shù)護(hù)理查房
評(píng)論
0/150
提交評(píng)論