版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、繼承與接口 ?繼承 ?控制符 ?接口 ?內(nèi)部類 繼承 ?繼承是一種由已有的類創(chuàng)建新類的機(jī)制,是面向 對象程序設(shè)計(jì)的基石之一。 ?子類繼承父類的屬性和方法,還可以定義新的屬 性和方法,也可以改寫父類的方法。 ?繼承實(shí)際上是存在于面向?qū)ο蟪绦蛑械膬蓚€(gè)類之 間的一種關(guān)系。 ?Java要求每個(gè)類都有父類(隱含為 java.lang包中 的Object類)。 ?super 是對父類的引用,引用父類的構(gòu)造方法、 父類成員屬性和方法。 繼承 屬性: name age salary 方法: setSalary getInfo Employee Engineer Manager Secretary Direct
2、or 屬性: allowance 方法: setAllowance getInfo 屬性: telephone department 方法: setTel getInfo 繼承增加屬性和方法 class Employee String name ; int age ; float salary ; void upSalary(float inc) salary = salary + inc ; class Manager extends Employee float allowance ; void setAllowance(float a) allowance = a ; class Dir
3、eator extends Manager String telephone ,department ; void setTel(String tel) telephone = tel ; 調(diào)用父類的構(gòu)造方法 ?子類繼承父類所有的屬性和方法(非 private), 但不繼承構(gòu)造方法。 ?子類或定義自己的構(gòu)造方法,或使用隱含構(gòu)造方 法。 ?在繼承情況下的對象初始化: ?為對象分配內(nèi)存并初始化(0、null、false) ?執(zhí)行每一層的類的顯式初始化(從父類到子類)。 ?執(zhí)行每一層的類的構(gòu)造方法 (從父類到子類) 。 調(diào)用父類構(gòu)造方法 ?為了保證安全性,在子類的構(gòu)造方法中,應(yīng)首先 調(diào)用一個(gè)父類的構(gòu)
4、造方法。 ?子類可在自己的構(gòu)造方法中使用 super() 來調(diào)用 父類帶參數(shù)的構(gòu)造方法。 ?super()調(diào)用語句必須是子類構(gòu)造方法中的第一 個(gè)可執(zhí)行語句。 ?若子類 的構(gòu)造方法中沒有super()語句,系統(tǒng) 將隱含調(diào)用父類無參數(shù)構(gòu)造方法 ?若父類的構(gòu)造方法都有參數(shù),則子類必須定義自 己的構(gòu)造方法,然后通過 super()語句調(diào)用父類 的某個(gè)構(gòu)造方法。 class A int x=1 ; A() x=10; A(int p1) /p1=5 x=x+p1; class Sa extends A class Sb extends A Sb() x=x+3; Sb(int p1) /p1=5 x=x
5、+p1; Sb(int p1,int p2) /p1=5,p2=100 super(p1); x=x+p2; class Ssb extends Sb Ssb() x=x+6 ; 訪問控制符 ?訪問控制符是一組起到限定類、域或方法是否可 以被程序里的其他部分訪問和調(diào)用的修飾符 。 ?類訪問控制符 ?公共類 :public 類名 ?一般類 ?一個(gè)包中的類只能訪問另一個(gè)包中的 public類。 ?一般類只能在同一包中使用,一個(gè)包中的類不用 說明可相互訪問。 ?把常在一起協(xié)同工作的類放在一個(gè)包里是很自然 的。 ?一個(gè)類作為整體對程序的其他部分可見,并不能 代表類內(nèi)的所有域和方法也同時(shí)對程序的其他部
6、分可見,前者只是后者的必要條件 ?屬性和方法的可見性 屬性和方法的訪問限定符 當(dāng)前類 同 Package 子孫 其他 Package public protected 無訪問限定符 private 屬性和方法的訪問限定符 ?為了使對象具有良好的封裝性,一般將類的非靜 態(tài)屬性設(shè)計(jì)成私有。 ?為了使其它類或?qū)ο竽軌蛟L問這些私有屬性,本 類必須提供訪問私有屬性的方法(公共方法)。 ?按照慣例,讀私有屬性的方法取名為 get 寫私有屬性的方法取名為 set ,get/set后面跟 上屬性的名稱,其中屬性的第一個(gè)字母要大寫。 這些方法在術(shù)語上叫做 Setter/Getter方法。 class Emplo
7、yee private double salary = 1800; public void setSalary(double salary) this.salary = salary; public double getSalary() return this.salary; 屬性的覆蓋(overwriting) ?如何訪問被隱藏的父類屬性: ?調(diào)用從父類繼承的方法操作的是從父類繼承的屬性。 ?使用super.屬性名。 class D200_Card extends Number_PhoneCard final double additoryFee=0.1; double balance ;
8、/ 覆蓋 boolean performDial() double getBalance() double getSuperBalance() return super.balance; / 訪問繼承屬性 方法覆蓋(overwriting) ?在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,子類可以把從父類那里繼承來 的某個(gè)方法改寫,形成同父類方法同名、解決的問題也相 似、但具體實(shí)現(xiàn)和功能卻不盡一致的新方法。 ?定義與父類完全相同的方法,實(shí)現(xiàn)對父類方法的覆蓋: ?完全相同的方法名 ?完全相同的參數(shù)列表 ?完全相同類型的返回值 ?拋出的例外要相同 ?訪問權(quán)限不能縮小 ?否則就不是方法的覆蓋,而是子類自己定義與父類無關(guān)的
9、 方法,父類的方法未被覆蓋。不正確的覆蓋有時(shí)會引發(fā)編 譯時(shí)候的語法錯(cuò)誤。 ?調(diào)用父類被覆蓋的方法 super.方法名 方法的覆蓋 Number_PhoneCard類: abstract boolean performDial(); double getBalance() final boolean performConnection(long cn,int pw) D200_Card類: boolean performDial() 覆蓋 實(shí)現(xiàn)抽象方法 double getBalance() 覆蓋 實(shí)現(xiàn)細(xì)節(jié)不同 抽象與抽象類 ?程序員可以先創(chuàng)建一個(gè)定義共有屬性和方法的一 般類,再從一般類派生出具
10、有特性的新類。 abstract class A abstract int min(int x, int y); int max(int x, int y) return xy ? x : y; ?抽象類不能用new創(chuàng)建對象。 接口 ?“ 接口”和抽象類有些類似。 ?接口中的方法都是沒有方法體的抽象方法。 ?接口中只能定義 static final 屬性 。 ?接口定義的僅僅是實(shí)現(xiàn)某一特定功能的一組功能 的對外接口和規(guī)范,而并沒有真正地實(shí)現(xiàn)這個(gè)功 能。 ?接口的功能實(shí)現(xiàn)是在“繼承”了這個(gè)接口的各個(gè) 類中完成的,由這些類來具體定義接口中所有抽 象方法的方法體。 ?通常把對接口的“繼承”稱為“實(shí)現(xiàn)
11、”。 接口的實(shí)現(xiàn) Object class abstract class class final class 接口 class java單重繼承 繼承 實(shí)現(xiàn) 接口的定義 public interface 接口名 extends 父接口名列表 / 常量域聲明 public static final 域類型 域名 = 常量值; / 抽象方法聲明 public abstract 返回值類型 方法名( 參數(shù)列表 ) ; ?接口是由常量和抽象方法組成的特殊類。 接口的實(shí)現(xiàn) public class MyApplet extends Applet implements Runnable , MouseLi
12、stener ?一個(gè)類只能有一個(gè)父類,但是它可以同時(shí)實(shí)現(xiàn)若 干個(gè)接口。如果把接口理解成特殊的類,那么這 個(gè)類利用接口實(shí)際上就獲得了多個(gè)父類,即實(shí)現(xiàn) 了多繼承。 ?instanceof 運(yùn)算符可用來判斷一個(gè)對象的類是否 實(shí)現(xiàn)了某個(gè)接口。 接口例 interface CalArea double pi = 3.14 ; double calRArea(double r) ; public class CalAreaImp implements CalArea public double calRArea(double r) return pi * r *r ; public static void
13、 main(String args) CalAreaImp imp=new CalAreaImp(); if(imp instanceof CalArea) /此處返回true System.out.println( imp.calRArea(5); 接口的規(guī)定 ?類定義中使用 implements 指定實(shí)現(xiàn)某一接口 ?類中必須具體實(shí)現(xiàn)該 interface 中定義的抽象方 法。 ?實(shí)現(xiàn)的方法必須指定為 public限定符。 ?實(shí)現(xiàn)接口的類要實(shí)現(xiàn)接口的全部方法。如果不需 要某個(gè)方法,也要定義成一個(gè)空方法體的方法。 public 方法名() 接口類型的變量和實(shí)現(xiàn)類的實(shí)例 ?可以聲明接口類型的變量
14、和接口類型的參數(shù)。 ?接口的實(shí)現(xiàn)類和接口之間的存在著類型兼容性, 由于這個(gè)原因,所以: ?接口類型的變量可以接受傳遞給它的實(shí)現(xiàn)類的實(shí)例 ?接口類型的參數(shù)可以接受傳遞給它的實(shí)現(xiàn)類的實(shí)例 ?利用接口類型的變量或參數(shù)存儲實(shí)現(xiàn)類的實(shí)例, 是面向?qū)ο缶幊痰闹匾椒?多態(tài) 接口類型變量和參數(shù)示例 interface I void doSome(); class IC1 implements I/接口I的實(shí)現(xiàn)類IC1 public void doSome() System.out.println(IC1 impl); class IC2 implements I/接口I的另一個(gè)實(shí)現(xiàn)類 public void
15、 doSome() System.out.println(IC2 impl); class Test static void testI(I i) /接口類型的參數(shù) i.doSome(); /見下頁 接口類型變量和參數(shù)示例(續(xù)) /接上頁 public static void main( String s) /接口類型的變量i,賦予IC1的實(shí)例 I i = new IC1(); i.doSome(); /此時(shí)調(diào)用IC1中的實(shí)現(xiàn)方法 /將IC2的實(shí)例賦予i i = new IC2(); i.doSome(); /此時(shí)調(diào)用IC2中的實(shí)現(xiàn)方法 /將i作為參數(shù)傳遞 testI(i); /此時(shí)直接將IC1的實(shí)例作為實(shí)參傳遞給testI testI(new IC1(); /main /Test 內(nèi)部類(inner class) ?在某個(gè)類
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)家樂餐飲服務(wù)與食材供應(yīng)合同4篇
- 2025年度電力設(shè)施維護(hù)司機(jī)派遣服務(wù)合同4篇
- 2025年度企業(yè)員工短期培訓(xùn)費(fèi)支付標(biāo)準(zhǔn)合同
- 二零二五年度新能源車輛采購配送及運(yùn)營服務(wù)合同3篇
- 二零二五年度企業(yè)法律顧問提前終止服務(wù)合同協(xié)議書
- 二零二五年度城市綠化項(xiàng)目臨時(shí)綠化員聘用合同4篇
- 2025年度個(gè)人與企業(yè)貸款融資合作協(xié)議合同范本4篇
- 2025版門面轉(zhuǎn)讓合同范本:商業(yè)地產(chǎn)經(jīng)營權(quán)轉(zhuǎn)讓詳細(xì)協(xié)議
- 課題申報(bào)參考:南水北調(diào)中線水源區(qū)家庭農(nóng)場耕地生態(tài)保護(hù)行為形成邏輯與實(shí)現(xiàn)機(jī)制研究
- 2025年度美容院美容護(hù)理產(chǎn)品代工合同4篇
- 定額〔2025〕1號文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 2024年城市軌道交通設(shè)備維保及安全檢查合同3篇
- 電力溝施工組織設(shè)計(jì)-電纜溝
- 【教案】+同一直線上二力的合成(教學(xué)設(shè)計(jì))(人教版2024)八年級物理下冊
- 湖北省武漢市青山區(qū)2023-2024學(xué)年七年級上學(xué)期期末質(zhì)量檢測數(shù)學(xué)試卷(含解析)
- 單位往個(gè)人轉(zhuǎn)賬的合同(2篇)
- 電梯操作證及電梯維修人員資格(特種作業(yè))考試題及答案
- 科研倫理審查與違規(guī)處理考核試卷
- GB/T 44101-2024中國式摔跤課程學(xué)生運(yùn)動能力測評規(guī)范
- 鍋爐本體安裝單位工程驗(yàn)收表格
- 高危妊娠的評估和護(hù)理
評論
0/150
提交評論