




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、九江學(xué)院信息科學(xué)與技術(shù)學(xué)院軟件教研室 王飛鵬http:/ 當(dāng)我們?cè)谧宇愔卸x的成員變量和父類中的成員變量同名時(shí),此時(shí)稱子類的成員變量隱藏了父類的成員變量。當(dāng)子類中定義了一個(gè)方法,并且這個(gè)方法的名字,返回類型,參數(shù)個(gè)數(shù)以及類型和父類的某個(gè)方法完全相同時(shí),父類的這個(gè)方法將被隱藏,這時(shí)我們說重寫了父類的方法。 子類通過成員變量的隱藏和方法的重寫可以把父類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。http:/ SuperClass /父類 int y; void setY() y=0; class SubClass extends SuperClass int y; / 父類變量y被隱藏 void setY
2、() / 重寫父類的方法setY() y=1; http:/ 子類在隱藏了父類的成員變量或重寫了父類的方法后,常常還要用到父類的成員變量,或在重寫的方法中使用父類中被重寫的方法以簡(jiǎn)化代碼的編寫,這時(shí)就要訪問父類的成員變量或調(diào)用父類的方法,Java中通過super來(lái)實(shí)現(xiàn)對(duì)父類成員的訪問。我們知道,this用來(lái)引用當(dāng)前對(duì)象,與this類似,super用來(lái)引用當(dāng)前對(duì)象的父類。 super的使用可以分為下面三種情況: 1)用來(lái)訪問父類被隱藏的成員變量,如: super.variable 2)用來(lái)調(diào)用父類中被重寫的方法,如: super.Method(paramlist) 3)用來(lái)調(diào)用父類的構(gòu)造方法,如
3、: super(paramlist)http:/ A /類A public int n; /公共類型的成員變量 public A() public A(int n) this.n = n; int method() return n; public class B extends A /類B public B() super(15); public static void main(String args) A aInstance = new B( ); int b=aInstance.method(); System.out.println(類A中的成員變量:+b); http:/ 類是B
4、類的父類, class b extends B當(dāng)我們用子類創(chuàng)建一個(gè)對(duì)象,并把這個(gè)對(duì)象的引用放到父類的對(duì)象中時(shí),例如 A a; A a=new B(); 或 A a; B b=new B(); a=b;稱這個(gè)父類對(duì)象a,是子類對(duì)象b的上轉(zhuǎn)型對(duì)象。 http:/ 對(duì)象的上轉(zhuǎn)型對(duì)象的實(shí)體是子類負(fù)責(zé)創(chuàng)建的,但上轉(zhuǎn)型對(duì)象會(huì)失去原對(duì)象的一些屬性和功能.上轉(zhuǎn)型對(duì)象具有如下特點(diǎn): 1)上轉(zhuǎn)型對(duì)象不能操作子類新增的成員變量和子類新增的方法。 2)上轉(zhuǎn)型對(duì)象可以操作子類繼承或重寫的成員變量,也可以使用子類繼承的或重寫的方法。 3)如果子類重寫了父類的某個(gè)方法后,當(dāng)對(duì)象的上轉(zhuǎn)對(duì)象調(diào)用這個(gè)方法時(shí)一定是調(diào)用了這個(gè)重寫的
5、方法,因?yàn)槌绦蛟谶\(yùn)行時(shí)知道,這個(gè)上轉(zhuǎn)對(duì)象的實(shí)體是子類創(chuàng)建的,只不過損失了一些功能而已。 不要將父類創(chuàng)建的對(duì)象和子類對(duì)象的上轉(zhuǎn)型對(duì)象相混淆。 上轉(zhuǎn)型對(duì)象在Java編程中是常見的。 可以將對(duì)象的上轉(zhuǎn)型對(duì)象再?gòu)?qiáng)制轉(zhuǎn)換到一個(gè)子類對(duì)象可以將對(duì)象的上轉(zhuǎn)型對(duì)象再?gòu)?qiáng)制轉(zhuǎn)換到一個(gè)子類對(duì)象,這時(shí)這時(shí),該子類對(duì)象又具備了子類所給的所有屬性和功能。該子類對(duì)象又具備了子類所給的所有屬性和功能。 http:/ Mammal /哺乳動(dòng)物類 private int n=40; void crySpeak(String s) System.out.println(s); public class Monkey extends
6、Mammal / 猴子類 void (int aa,int bb) int cc=aa*bb; System.out.println(cc); void crySpeak(String s) System.out.println(*+s+*); public static void main(String args) Mammal mammal=new Monkey(); / mammal是Monkey類的對(duì)象的上轉(zhuǎn)型對(duì)象. mammal.crySpeak(I love this game); / puter(10,10); Monkey monkey=(Monkey)mammal; /把上轉(zhuǎn)
7、型對(duì)象強(qiáng)制轉(zhuǎn)化為子類的對(duì)象. puter(10,10); http:/ love this game*100在上述例子中,上轉(zhuǎn)對(duì)象mammal調(diào)用方法:mammal.crySpeak(I love this game);得到的結(jié)果是”*I love this game*”.而不是”I love this game”。因?yàn)閙ammal調(diào)用的是子類重寫的方法crySpeak.在main()中,如果出現(xiàn)下面的兩行代碼,那將是錯(cuò)誤的:mammal.n=1000; /因?yàn)樽宇惐緛?lái)就沒有繼承n。 puter(10,10); /因?yàn)閏omputer方法是子類新增的方法。http:/ 在Java語(yǔ)言中,多態(tài)性
8、主要體現(xiàn)在兩個(gè)方面:由方法重載實(shí)現(xiàn)的靜態(tài)多態(tài)性(編譯時(shí)多態(tài))和方法重寫實(shí)現(xiàn)的動(dòng)態(tài)多態(tài)性(運(yùn)行時(shí)多態(tài)),如下:1) 編譯時(shí)多態(tài)在編譯階段,具體調(diào)用哪個(gè)被重載的方法,編譯器會(huì)根據(jù)參數(shù)的不同來(lái)靜態(tài)確定調(diào)用相應(yīng)的方法。2) 運(yùn)行時(shí)多態(tài)由于子類繼承了父類所有的屬性(私有的除外),所以子類對(duì)象可以作為父類對(duì)象使用。程序中凡是使用父類對(duì)象的地方,都可以用子類對(duì)象來(lái)代替。一個(gè)對(duì)象可以通過引用子類的實(shí)例來(lái)調(diào)用子類的方法。 如果子類重寫了父類的方法,那么重寫方法的調(diào)用原則如下:Java運(yùn)行時(shí)系統(tǒng)根據(jù)調(diào)用該方法的實(shí)例,來(lái)決定調(diào)用哪個(gè)方法。對(duì)子類的一個(gè)實(shí)例,如果子類重寫了父類的方法,則運(yùn)行時(shí)系統(tǒng)調(diào)用子類的方法;如果子
9、類繼承了父類的方法(未重寫),則運(yùn)行時(shí)系統(tǒng)調(diào)用父類的方法。 另外,方法重寫時(shí)應(yīng)遵循的原則如下:改寫后的方法不能比被重寫的方法有更嚴(yán)格的訪問權(quán)限。改寫后的方法不能比被重寫的方法有更嚴(yán)格的訪問權(quán)限。改寫后的方法不能比被重寫的方法產(chǎn)生更多的異常改寫后的方法不能比被重寫的方法產(chǎn)生更多的異常。 進(jìn)行方法重寫時(shí)必須遵從這兩個(gè)原則,否則編譯器會(huì)指出程序出錯(cuò)。http:/ Parentpublic void function() System.out.println(I am in Parent!);class Child extends Parentprivate void function()System
10、.out.println(I am in Child!);public class RTpolyTest public static void main(String args) Parent pl=new Parent( ); Parent p2=new Child( ); p1.function( ); p2.function( ); http:/ RTpolyTest.javaRTpolyTest.java:8: function() in Child cannot override function() in Parent; attempting to assign weaker ac
11、cess privileges; was public private void function() RTpolyTest.java:16: cannot find symbolsymbol : variable p1location: class RTpolyTest p1.function( ); 2 errors可以看出,該程序中實(shí)例p2調(diào)用function()方法時(shí)會(huì)導(dǎo)致訪問權(quán)限的沖突。 http:/ Java語(yǔ)言中,用abstract關(guān)鍵字來(lái)修飾一個(gè)類時(shí),這個(gè)類叫做抽象類。一個(gè)abstract 類只關(guān)心它的子類是否具有某種功能,并不關(guān)心該功能的具體實(shí)現(xiàn),功能的具體行為由子類負(fù)責(zé)實(shí)現(xiàn)
12、的。例如: public abstract class Drawing public abstract void drawDot(int x, int y); public void drawLine(int x1, int y1,int x2, int y2) 用abstract來(lái)修飾一個(gè)方法時(shí),該方法叫做抽象方法。與final類和方法相反,abstract類必須被繼承,abstract方法必須被重寫。 http:/ 當(dāng)一個(gè)類的定義完全表示抽象的概念時(shí),它不應(yīng)該被實(shí)例化為一個(gè)對(duì)象。例如Java中的Number類就是一個(gè)抽象類,它只表示數(shù)字這一抽象概念,只有當(dāng)它作為整數(shù)類Integer或?qū)崝?shù)類
13、Float等的父類時(shí)才有意義。定義一個(gè)抽象類的格式如下: abstract class abstractClass 由于抽象類不能被實(shí)例化,因此下面的語(yǔ)句會(huì)產(chǎn)生編譯錯(cuò)誤: new abstractClass(); 抽象類中可以包含抽象方法,為所有子類定義一個(gè)統(tǒng)一的接口,對(duì)抽象方法只需聲明,而不需實(shí)現(xiàn),因此它沒有方法體。其格式如下: abstrac returnType abstractMethod(paramlist); http:/ class AAabstract void callme( );void metoo( )System.out.println(InsideAs metoo()
14、 method);class BB extends AAvoid callme( )System.out.println(Inside Bs callme() method);public class AAbstractpublic static void main(String args)AA cc=new BB(); /cc為上轉(zhuǎn)型對(duì)象cc.callme();cc.metoo(); http:/ 從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實(shí)現(xiàn)。通過接口使得處于不同層次,甚至互不相關(guān)的類可以具有相同的行為。接口其實(shí)就是方法定義和常量值的集合。
15、它的優(yōu)點(diǎn)主要體現(xiàn)在下面幾個(gè)方面:(1)通過接口可以實(shí)現(xiàn)不相關(guān)類的相同行為,而不需要考慮這些類之間的層次關(guān)系。(2)通過接口可以指明多個(gè)類需要實(shí)現(xiàn)的方法。(3)通過接口可以了解對(duì)象的交互界面,而不需了解對(duì)象所對(duì)應(yīng)的類。 接口把方法的定義和類的層次區(qū)分開來(lái),通過它可以在運(yùn)行時(shí)動(dòng)態(tài)地定位所調(diào)用的方法。同時(shí)接口中可以實(shí)現(xiàn)“多重繼承”,且一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。正是這些機(jī)制使得接口提供了比多重繼承(如C+等語(yǔ)言)更簡(jiǎn)單、更靈活、而且更強(qiáng)勁的功能。 http:/ Java 不支持多繼承性,即一個(gè)類只能有一個(gè)父類。單繼承性使得Java類層次簡(jiǎn)單,易于程序的管理。為了克服單繼承的缺點(diǎn),Java使用了接口,一個(gè)
16、類可以實(shí)現(xiàn)多個(gè)接口。使用關(guān)鍵字interface 來(lái)定義一個(gè)接口。接口的定義和類的定義很相似,分為接口聲明和接口體兩部分。1、 接口聲明接口聲明 我們?cè)褂胏lass關(guān)鍵字來(lái)聲明類,接口通過使用關(guān)鍵自interface 來(lái)聲明. 完整的接口定義格式如下:public interface interfaceName extends listOfSuperInterface 其中public修飾符指明任意類均可以使用這個(gè)接口,缺省情況下,只有與該接口定義在同一個(gè)包中的類才可以訪問這個(gè)接口。extends子句與類聲明中的extends子句基本相同,不同的是一個(gè)接口可以有多個(gè)父接口,用逗號(hào)隔開,而一個(gè)
17、類只能有一個(gè)父類。子接口繼承父接口中所有的常量和方法。 通常接口名稱以able或ible結(jié)尾,表明接口能完成一定的行為,例如Runnable、Serializable。http:/ 接口體接口體 接口體中包含常量定義和方法定義兩部分。其中常量定義部分定義的常量均具有public、static和final屬性。其格式如下: returnType methodName(paramlist); 接口中只能進(jìn)行方法的聲明,而不提供方法的實(shí)現(xiàn),所以,方法定義沒有方法體,且用分號(hào)(;)結(jié)尾,在接口中聲明的方法具有public和abstract屬性。另外,如果在子接口中定義了和父接口同名的常量,則父接口中的
18、常量被隱藏。例如:interface Summaryable final int MAX=50; / MAX具有public、static、final屬性void printone(float x);float sum(float x ,float y); 上面這段程序可以以Summaryable.java來(lái)保存,也可以寫入其它Java程序中。http:/ 一個(gè)類通過使用關(guān)鍵字implements 聲明自己使用(或?qū)崿F(xiàn))一個(gè)或多個(gè)接口。如果使用多個(gè)接口,用逗號(hào)隔開接口名。如 class Calculate extends Computer implements Summary,Substrac
19、table 類Calculate使用了Summary 和Substractable接口,繼承了Computer類。如果一個(gè)類使用了某個(gè)接口,那么這個(gè)類必須實(shí)現(xiàn)該接口的所有方法,即為這些方法提供方法體。需要注意的如下: 1)在類中實(shí)現(xiàn)接口的方法時(shí),方法的名字,返回類型,參數(shù)個(gè)數(shù)及類型必須與接口中的完全一致。 2)接口中的方法被默認(rèn)是public ,所以類在實(shí)現(xiàn)接口方法時(shí),一定要用public 來(lái)修飾。 3)另外,如果接口的方法的返回類型如果不是void 的,那么在類中實(shí)現(xiàn)該接口方法時(shí),方法體至少要有一個(gè)return 語(yǔ)句。如果是void 型,類體除了兩個(gè)大括號(hào)外,也可以沒有任何語(yǔ)句.http:/
20、 從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實(shí)現(xiàn)。通過接口使得處于不同層次,甚至互不相關(guān)的類可以具有相同的行為。接口其實(shí)就是方法定義和常量值的集合。 它的優(yōu)點(diǎn)主要體現(xiàn)在下面幾個(gè)方面: (1)通過接口可以實(shí)現(xiàn)不相關(guān)類的相同行為,而不需要考慮這些類之間的層次關(guān)系。 (2)通過接口可以指明多個(gè)類需要實(shí)現(xiàn)的方法。 (3)通過接口可以了解對(duì)象的交互界面,而不需了解對(duì)象所對(duì)應(yīng)的類。接口把方法的定義和類的層次區(qū)分開來(lái),通過它可以在運(yùn)行時(shí)動(dòng)態(tài)地定位所調(diào)用的方法。同時(shí)接口中可以實(shí)現(xiàn)“多重繼承”,且一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。正是這些機(jī)制使得接口提供了比多重繼承(如C+
21、等語(yǔ)言)更簡(jiǎn)單、更靈活、而且更強(qiáng)勁的功能。http:/ MultInterfaces.javainterface I1 abstract void test(int i); interface I2 abstract void test(String s); public class MultInterfaces implements I1, I2 public void test(int i) System.out.println(In MultInterfaces.I1.test);public void test(String s) System.out.println(In MultInterfaces.I2.test); public static void main(String a) MultInterfaces t = new MultInterfaces(); t.test(42); t.test(Hello); http:/ 簡(jiǎn)單地說,一個(gè)類被嵌套定義于另一個(gè)類中,稱為嵌套
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北黃岡應(yīng)急管理職業(yè)技術(shù)學(xué)院《國(guó)際商務(wù)策劃》2023-2024學(xué)年第二學(xué)期期末試卷
- Unit 5 Topic 2 Section C 教學(xué)設(shè)計(jì) 2024-2025學(xué)年仁愛科普版八年級(jí)英語(yǔ)下冊(cè)
- 比例的認(rèn)識(shí)(教學(xué)設(shè)計(jì))-2023-2024學(xué)年六年級(jí)下冊(cè)數(shù)學(xué)北師大版
- 慶陽(yáng)職業(yè)技術(shù)學(xué)院《工業(yè)通風(fēng)與除塵》2023-2024學(xué)年第二學(xué)期期末試卷
- 宣化科技職業(yè)學(xué)院《建筑風(fēng)景速寫》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧現(xiàn)代服務(wù)職業(yè)技術(shù)學(xué)院《食品生物化學(xué)(實(shí)驗(yàn))》2023-2024學(xué)年第二學(xué)期期末試卷
- 濟(jì)南2024年山東濟(jì)南市章丘區(qū)社區(qū)工作者招考10人筆試歷年參考題庫(kù)附帶答案詳解
- 信陽(yáng)師范大學(xué)《語(yǔ)文課堂教學(xué)技能》2023-2024學(xué)年第二學(xué)期期末試卷
- 濟(jì)南護(hù)理職業(yè)學(xué)院《中西醫(yī)結(jié)合實(shí)驗(yàn)診斷研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 河南質(zhì)量工程職業(yè)學(xué)院《結(jié)構(gòu)化學(xué)C》2023-2024學(xué)年第二學(xué)期期末試卷
- 選擇性必修二《Unit 4 Journey across a vast land》單元教學(xué)設(shè)計(jì)
- 2024年一年級(jí)數(shù)學(xué)下冊(cè)教學(xué)計(jì)劃15篇
- 2024年時(shí)事政治題(考點(diǎn)梳理)
- 嶺南版六年級(jí)美術(shù)下冊(cè)教學(xué)工作計(jì)劃
- 門診常見疾病護(hù)理常規(guī)課件
- 數(shù)字化時(shí)代的智慧課堂建設(shè)與應(yīng)用
- 初中九年級(jí)美術(shù)期末藝術(shù)測(cè)評(píng)指標(biāo)試卷及答案
- 藥品經(jīng)營(yíng)質(zhì)量管理制度樣本
- 有機(jī)農(nóng)業(yè)概述課件
- 沙子檢測(cè)報(bào)告
- 2023-2024學(xué)年部編版必修下冊(cè) 1-1 《子路、曾皙、冉有、公西華侍坐》教案2
評(píng)論
0/150
提交評(píng)論