《類的進(jìn)一步討論》PPT課件.ppt_第1頁
《類的進(jìn)一步討論》PPT課件.ppt_第2頁
《類的進(jìn)一步討論》PPT課件.ppt_第3頁
《類的進(jìn)一步討論》PPT課件.ppt_第4頁
《類的進(jìn)一步討論》PPT課件.ppt_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1,第4講 類的繼承、抽象類及接口,主要內(nèi)容 類的繼承 抽象類 內(nèi)部類、匿名類及最終類 包及訪問限定 接口 本講小結(jié),2,類的繼承,繼承是面向?qū)ο蟮闹匾攸c之一。 類的繼承使得能夠在已有類的基礎(chǔ)上構(gòu)造新的類,新類除了具有被繼承類的屬性和方法外,還可以根據(jù)需要添加新的屬性和方法。 繼承有利于代碼的復(fù)用。 通過繼承可以更有效地組織程序結(jié)構(gòu),并充分利用已有的類來完成復(fù)雜的任務(wù),減少了代碼冗余和出錯的幾率。 類繼承的實現(xiàn) 下邊以一個定義學(xué)生入學(xué)注冊登記類的示例說明類繼承的實現(xiàn)。,3,類的繼承 (定義類StudentRegister ),學(xué)生入學(xué)注冊登記項包括: 個人的基本信息(這些信息包括在Citiz

2、en類中); 學(xué)號 String (studentID) 入學(xué)成績 int (enterResult) 院系 String (department) 專業(yè) String (specialty) 等等。此外還需要定義一些顯示這些項的方法。,public class StudentRegister extends Citizen String studentId; /說明學(xué)號 int enterResult; /說明入學(xué)成績 String department; /說明院系 String specialty; /說明專業(yè),4,類的繼承 (定義類StudentRegister ),public St

3、udentRegister(String name,String alias,String sex, String brithday,String homeland,String ID,String studentId,int enterResult,String department,String specialty) /構(gòu)造方法 super(name,alias,sex,brithday,homeland,ID); /調(diào)用父類構(gòu)造方法 this.studentId=studentId; this.result=result; this.department=department; this

4、.specialty=specialty; public void display() super.display (); /調(diào)用父類顯示方法 System.out.println(學(xué)號:+studentId); System.out.println(入學(xué)成績:+enterResult); System.out.println(院系:+department); System.out.println(專業(yè):+specialty); System.out.println(-); ,編譯程序,5,測試StudentRegister類,public class StudentRegisterTest

5、public static void main(String args) StudentRegister s1=new StudentRegister(“麗柔”, “一曉”,“女”,“1988.12.11”,“上?!? ,“200608010201”,624,“工程學(xué)院”,“工業(yè)設(shè)計”); /創(chuàng)建對象 s1.display(); /顯示對象屬性 ,6,類的繼承,繼承就是子類利用父類中定義的變量和方法,就像它們屬于子類本身一樣. 方法的重載就是在同一個類中至少有兩個方法使用同一個名字,區(qū)分它們的主要依據(jù): 參數(shù)的個數(shù)不同; 或 參數(shù)的類型不同。 這是多態(tài)性

6、的具體體現(xiàn)。 例:在StudentRegister類中加入不帶參數(shù)的構(gòu)造方法和能夠只顯示學(xué)號、姓名和入學(xué)成績項的成員方法。,7,添加方法,public StudentRegister() super(); /執(zhí)行父類構(gòu)造方法 studentId=“00000000000”; enterResult=0; department=“ 無 ”; specialty=“ 無 “; public void display( StudentRegister s1) System.out.print(學(xué)號:+s1.studentId); System.out.print (“ - 姓名:”+s1.getNa

7、me(); System.out.println(“ - 入學(xué)成績:+s1.enterResult); ,8,測試StudentRegister類的功能,public class StudentRegisterTest1 public static void main(String args) StudentRegister s1=new StudentRegister(“麗柔”,“一曉”,“女”, “1988.12.11”, “上海”, , “200608010201”, 624,“工程學(xué)院”,“工業(yè)設(shè)計”); /創(chuàng)建對象s1 StudentRegis

8、ter s2=new StudentRegister(); /創(chuàng)建對象s2 s2.studentId=“20060801245”; /為對象s2的屬性賦值 s2.enterResult=585;/. s2.setName(“席鉿”); /. s1.display(); /顯示對象s1所有屬性 s2.display(); /顯示對象s2所有屬性 s1.display(s1); /顯示對象s1的部分屬性 s2.display(s2); /顯示對象s2的部分屬性 ,9,類的繼承,方法的覆蓋 在子類中重新定義(重寫)父類中已有的方法。 這樣做的好處是方法名一致易記易用; 可以實現(xiàn)與父類方法不同的功能;

9、 調(diào)用父類的同名方法: super.方法名(參數(shù)列表); 變量的隱藏 在子類中定義了和父類中同名的屬性 在方法中定義了和類中同名的屬性 在方法中引用屬性時,系統(tǒng)采用局部優(yōu)先的原則,即: 方法中定義的屬性直接使用; 本類中定義的同名屬性的引用:this.屬性名; 父類中定義的同名屬性的引用:super.屬性名;,10,抽象類,類是對現(xiàn)實世界中實體的抽象,但我們不能以相同的方法為現(xiàn)實世界中所有的實體做模型,因為大多數(shù)現(xiàn)實世界的類太抽象而不能獨立存在。例如:幾何圖形類、交通工具類、鳥類等等。 抽象類是指不能直接被實例化的類,因此一般把它作為其它類的超類。與final類正好相反。 抽象方法是指只有方法

10、聲明而沒有方法體的方法。在該類中只聲明但不提供方法實現(xiàn)(方法體),由繼承類提供方法實現(xiàn)。 只要類中聲明了一個抽象方法,該類就必須是抽象類.,11,抽象類的定義,定義抽象類的一般格式如下: 訪問限定符 abstract class 類名 . /屬性說明 訪問限定符 abstract 類型 方法名(參數(shù)聲明列表) ; /抽象方法聲明 /非抽象方法定義 所謂抽象方法,是指僅聲明了類的行為,并沒有真正實現(xiàn)行為的代碼。 抽象方法只能存在于抽象類中. 構(gòu)造方法、靜態(tài)(static)方法、最終(final)方法和私有(private)方法不能被聲明為抽象方法。 抽象類中可以有一個或多個抽象方法,也可以沒有。

11、如果沒有抽象方法,這就意味著要避免使用該類直接創(chuàng)建對象。 抽象類只能被繼承(派生子類)而不能創(chuàng)建具體對象即不能被實例化。,12,Shape類定義,定義幾何圖形類Shape 任何幾何圖形都有一個名稱,都占據(jù)一定的面積,因此我們可以作如下的抽象定義: /* 這是抽象的平面形狀類的定義程序的名字是:Shape.java */ public abstract class Shape String name; /聲明屬性 public abstract double area(); /抽象方法聲明 抽象類的實現(xiàn) 例:定義并實現(xiàn)一個三角形類Triangle 。,13,抽象類的實現(xiàn)(三角形),三角形面積公式

12、: 其中:a,b,c 表示三角形的三條邊的邊長,根據(jù)上邊公式中所涉及的量,需要在Triangle 類中定義三角形的有關(guān)屬性三條邊:sideA、 sideB、 sideC。 由Shape類派生Triangle類。因此在Triangle 類中必須實現(xiàn)Shape類中的抽象方法area(); 也可在Triangle類中定義計算三角形周長等方法。,14,Triangle類定義,/*這是定義平面幾何圖形三角形類的程序 程序的名字是:Tritangle.java*/ public class Triangle extends Shape /這是Shape的派生子類 double sideA,sideB,si

13、deC; /聲明實例變量三角形3條邊 public Triangle() /無參數(shù)構(gòu)造器 name=示例全等三角形; sideA=1.0; sideB=1.0; sideC=1.0; public Triangle(double sideA,double sideB,double sideC) /構(gòu)造器 name=任意三角形; this.sideA = sideA; this.sideB = sideB; this.sideC = sideC; ,15,Triangle類定義實現(xiàn),public double area() /實現(xiàn)抽象方法 double s=0.5*(sideA+sideB+si

14、deC); return Math.sqrt(s*(s-sideA)*(s-sideB)*(s-sideC); 測試Triangle類 public class TriangleTest public static void main(String args) Triangle t1=new Triangle(); /創(chuàng)建一個標(biāo)準(zhǔn)三角形對象 Triangle t2=new Triangle(4,5,6); /創(chuàng)建一個三角形對象 System.out.println(+”面積=”+t1.area(); System.out.println(+”邊長為4,5,6其面積=

15、”+t2.area(); ,16,內(nèi)部類,內(nèi)部類(Inner Class)是指被嵌套定義在另外一個類內(nèi)甚至是一個方法內(nèi)的類,也稱之為類中類。嵌套內(nèi)部類的類稱為外部類(Outer Class),內(nèi)部類通常被看成是外部類的一個成員。 例: 工廠工人加工正六邊形的陰井蓋,先將鋼板壓切為圓型,然后再將其切割為正六邊形,求被切割下來的廢料面積。 求解這個問題。只需要計算出圓的面積和正六邊形的面積,然后相減即可。當(dāng)然我們可以將正六邊形化作六個全等三角形求其面積。 下邊建立一個圓類,并在圓類內(nèi)定義內(nèi)部類處理正六邊形。,17,定義Circle類,/* 該程序主要演示內(nèi)部類的應(yīng)用, 程序名:Circle.jav

16、a,在類中嵌套了Polygon類 */ public class Circle extends Shape /繼承Shape類 double radius; public Circle() /構(gòu)造標(biāo)準(zhǔn)圓 name=標(biāo)準(zhǔn)圓; radius=1.0; public Circle(double radius) /構(gòu)造一般圓 name=一般圓; this.radius=radius; public double area() /實現(xiàn)父類的抽象方法 return radius*radius*Math.PI; / 返回圓的面積 ,18,定義Circle類,class Polygon /定義內(nèi)部類Polyg

17、on Triangle t1; /聲明三角形類對象 Polygon(double a,double b,double c) /內(nèi)部類構(gòu)造方法 t1=new Triangle(a,b,c); /創(chuàng)建三角形對象 double area() /內(nèi)部類方法 return t1.area()*6; /返回正六邊形面積 /內(nèi)部類Polygon結(jié)束 public double remainArea() /計算被切割掉的廢料面積 Polygon p1=new Polygon(radius,radius,radius); /創(chuàng)建內(nèi)部類對象 return area()-p1.area(); ,19,測試Circl

18、e類求切除面積,public class CircleTest public static void main(String args) Circle c1=new Circle(.5); /創(chuàng)建半徑為0.5的圓對象 System.out.println(圓面積=+c1.area(); System.out.println(正六邊形面積=+(c1.area()-c1.remainArea(); System.out.println(被切除的面積=+c1.remainArea(); ,20,內(nèi)部類特點,內(nèi)部類作為一個成員,它有如下特點: 可以使用static修飾為靜態(tài)內(nèi)部類。靜態(tài)和非靜態(tài)內(nèi)部類的

19、主要區(qū)別: 靜態(tài)內(nèi)部類對象和外部類對象可以相對獨立,既可直接創(chuàng)建對象(new 外部類名.內(nèi)部類名() ),也可通過外部類對象創(chuàng)建。非靜態(tài)內(nèi)部類對象只能由外部對象創(chuàng)建。 靜態(tài)類中只能使用外部類的靜態(tài)成員,不能使用外部類的非靜態(tài)成員;非靜態(tài)類中可以使用外部類的所有成員。 在靜態(tài)類中可以定義靜態(tài)和非靜態(tài)成員;在非靜態(tài)類中只能定義非靜態(tài)成員。 外部類不能直接存取內(nèi)部類的成員。只有通過內(nèi)部類才能訪問內(nèi)部類的成員。 如果內(nèi)部類被定義在一個方法內(nèi)(本地內(nèi)部類),它完全被隱藏在方法中,甚至同一個類的其他方法也無法使用它。,21,匿名類和最終類,匿名類(Anonymous Class) 所謂匿名類就是一種沒有類

20、名的內(nèi)部類,通常更多的出現(xiàn)在事件處理的程序中。 在某些程序中,往往需要定義一個功能特殊且簡單的類,且只想使用它的一個對象,并把它作為參數(shù)傳遞給一個方法。此種情況下只要該類是一個現(xiàn)有類的派生或?qū)崿F(xiàn)一個接口,就可以使用匿名類。 最終類 所謂最終類即是使用“final”關(guān)鍵字修飾的類。一個類被聲明為最終類,這就意味著該類的功能已經(jīng)齊全,不能夠由此類再派生子類。 在定義類時,當(dāng)你不希望某類再能派生子類,可將它聲明為最終類。,22,包及訪問限定,Java中常用的標(biāo)準(zhǔn)類包 java.lang 包中存放了Java最基礎(chǔ)的核心類,諸如: System、Math、String、Integer、Float類等等。

21、 java.awt 包中存放了構(gòu)建圖形化用戶界面(GUI)的類。 javax.swing 包中提供了更加豐富的、精美的、功能強(qiáng)大的GUI組件,是java.awt功能的擴(kuò)展。 java.applet 包中提供了applet(小程序)所需要的一些類. java.util 包中提供了一些實用工具類。 java.io 包中提供了數(shù)據(jù)流輸入/輸出操作的類。 java.sql 包中提供了支持使用標(biāo)準(zhǔn)SQL方式訪問數(shù)據(jù)庫功能的類。 包中提供與網(wǎng)絡(luò)通訊相關(guān)的類。用于編寫網(wǎng)絡(luò)實用程序。,23,包(package),在Java中使用包來管理類。 創(chuàng)建包(package)語句 其一般格式如下: package 包名

22、; 需要說明的是: 此語句必須放在整個源程序第一條語句的位置(注解行和空行除外)。 包名應(yīng)符合標(biāo)識符的命名規(guī)則,習(xí)慣上,包名使用小寫字母書寫。 可以使用多級結(jié)構(gòu)的包名.如標(biāo)準(zhǔn)類包那樣:java.util、java.sql等等。 例如:要把所有的幾何圖形類放入shape類包中,只需在這些幾何圖形類程序的第一條語句位置放上:package shape;,24,包(package),包文件的編譯 javac d 文件夾名 源文件名 其中: -d 表明帶有包的創(chuàng)建。 文件夾名 是已存在的文件夾名,要創(chuàng)建的包將放在該文件夾下。 引用類包中的類 在程序的第一行使用import語句導(dǎo)入類包: import

23、包名.*; 或: import 包名.類名; 在程序中直接引用類包中所需要的類。其引用的一般格式是: 包名.類名,25,訪問限定,public public限定符不能用于限定內(nèi)部類。 一個源程序中可以定義多個類,但最多只能有一個被限定為公共類。如果有公共類,則程序名必須與公共類同名。 private 限定符只能用于成員變量、方法和內(nèi)部類。私有的成員只能在本類中被訪問,即只能在本類的方法中由本類的對象引用。 protected 限定符也只能用于成員變量、方法和內(nèi)部類。它可以被其子類(包括本包的或其他包的)訪問,也可以被本包內(nèi)的其他類訪問。,26,接口,在Java中可以把接口看作是一種特殊的抽象類

24、,它只包含常量和抽象方法的定義,而沒有變量和方法的實現(xiàn),它用來表明一個類必須做什么,而不去規(guī)定它如何做。 public interface 接口名 extends 父接口名列表 /以下聲明常量 類型 常量名=常數(shù)值; /以下聲明抽象方法 返回值類型 方法名(參數(shù)列表) throw 異常列表 ; 對接口體中定義的常量,系統(tǒng)默認(rèn)為是“static final”修飾的,不需指定。 對接口體中聲明的方法,系統(tǒng)默認(rèn)為是“abstract”的,也不需指定。,只有public和缺省的,接口名必須與文件名相同,27,定義接口,例:將上述的抽象類Shape改為接口實現(xiàn)。 /* 本程序是一個定義接口類的程序,名字是:ShapeI.java * 接口名為ShapeI,它包含常量PI和計算面積與周長的方法 * area()、girth()聲明 */ package shape; public i

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論