最新-第三章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)-PPT課件_第1頁
最新-第三章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)-PPT課件_第2頁
最新-第三章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)-PPT課件_第3頁
最新-第三章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)-PPT課件_第4頁
最新-第三章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)-PPT課件_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)本章主要內(nèi)容3.1面向?qū)ο蟮幕靖拍?.2類與對象3.2.1 定義類3.2.2 成員方法3.3 對象3.4 面向?qū)ο筇匦?.4.1 封裝性3.4.2繼承性3.4.3多態(tài)性3.4.4 其它修飾符的用法3.5接口和包3.5.1接口3.5.2包3.5.3 壓縮文件.jar復(fù)習情況檢查分析【例子2-16】的執(zhí)行過程分析【習題15】的執(zhí)行過程3.1面向?qū)ο蟮幕靖拍?、 對象的基本概念 對象是系統(tǒng)中用來描述客觀事物的一個實體,它是構(gòu)成系統(tǒng)的一個基本單位。對象是問題域或?qū)崿F(xiàn)域中某些事物的一個抽象,反映該事物在系統(tǒng)中需要保存的信息和發(fā)揮的作用,是一組屬性和有權(quán)對這些屬性進行操作的

2、一組服務(wù)的封裝體。 從這個角度看,客觀世界是由對象和對象之間的聯(lián)系組成的。現(xiàn)實世界中的對象有兩個共同特征:形態(tài)和行為。 圖3.2 軟件對象的變量和方法 72、 類的基本概念 類是具有共同屬性和行為的對象的抽象。類可以定義為數(shù)據(jù)和方法的集合。對象具有特殊屬性和行為方式的實體。類對象抽象實例化封裝的實體=數(shù)據(jù)+方法操作或行為屬性或狀態(tài)方法數(shù)據(jù)或變量一個類的例子 類用class作為它的關(guān)鍵字,例如我們要創(chuàng)建一個汽車類,則可表示為:用類創(chuàng)建對象實例化當我們要通過汽車類來創(chuàng)建一個轎車對象,并使用它的剎車行為方法時,則要用下面的格式進行實例化: /實例化汽車對象汽車轎車= new 汽車( ) ; /引用汽

3、車對象的剎車方法轎車.剎車( ) ;3.2類與對象類和對象是Java的核心和本質(zhì)。它們是Java語言的基礎(chǔ),編寫一個Java程序,在某種程度上來說就是定義類和創(chuàng)建對象。定義類和建立對象是Java編程的主要任務(wù)。 3.2.1 定義類 1、 類的一般形式 類由類聲明和類體組成,而類體又由成員變量和成員方法組成(如圖3.3所示): 一個具體的類 2、類聲明 類聲明由四部分組成:類修飾符、類關(guān)鍵字class、聲明父類、實現(xiàn)接口,其一般形式如下: publicabstract|final class 類名 extends 父類名 implements 接口列表 各組成部分的具體說明 (1) 類修飾符pu

4、blic:這個public關(guān)鍵字聲明了類可以在其他類中使用。缺省時,該類只能被同一個包中的其他類使用。abstract:聲明這個類為抽象類,即這個類不能被實例化。final:聲明該類不能被繼承,即不能有子類。也就是說,不能用它通過擴展的辦法來創(chuàng)建新類。(2) 類的關(guān)鍵字class在類聲明中,class是聲明類的關(guān)鍵字,表示類聲明的開始,類聲明后面跟著類名,按習慣類名要用大寫字母開頭,并且類名不能用阿拉伯數(shù)字開頭。給類名命名時,最好取一個容易識別且有意義的名字,避免A、B、C之類的類名。 (3) 聲明父類extends為聲明該類的父類,這表明該類是其父類的子類。一個子類可以從它的父類繼承變量和方

5、法。extends只能實現(xiàn)單繼承。創(chuàng)建子類格式:class subclass extends 父類名17類的繼承被繼承的類稱為父類繼承父類的類稱為子類執(zhí)行繼承時,子類將獲得父類的屬性,并具有自身特有的屬性。 Emoloyee類: name sexWorker類: category dressAllowanceOfficer類: empClass vehicle工人類,繼承了父類的姓名和性別屬性外還包含類別和是否有服裝津貼屬性主任類,還包含級別和是否配備交通工具屬性職員類,具有姓名和性別兩個屬性(4)實現(xiàn)接口在類聲明中使用關(guān)鍵字implements實現(xiàn)接口,當要實現(xiàn)有多個接口時,各接口名以逗號分

6、隔,其形式為: implements 接口1,接口2,,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。一個類可以實現(xiàn)多個接口,以某種程度實現(xiàn)“多繼承”。 3、 成員變量和局部變量成員變量(在類體中定義,在整個類中都有效);局部變量(在方法中定義,只在本方法中有效)。 變量(1)成員變量 最簡單的成員變量聲明的形式為:類型成員變量名; (2)局部變量在方法中聲明的變量以及方法中的參數(shù)稱為局部變量。 (3)如果局部變量名與成員變量名相同,則成員變量被屏蔽。 成員變量與局部變量class Data int x=12,y=5;public void sum() i

7、nt s; s=x+y; x、y是成員變量,類中所有方法都可以使用它們s是局部變量。僅限于在sum()方法內(nèi)部使用。如果局部變量名與成員變量名相同,則成員變量被屏蔽。 class Data int x=12,y=5; public void sum() int x=3; /局部變量x屏蔽了成員變量 int s; s=x+y; 3.2.2 成員方法 在Java中,必須通過方法才能完成對類和對象的屬性操作。成員方法只能在類的內(nèi)部聲明并加以實現(xiàn)。一般在類體中聲明成員變量之后再聲明方法。 1、方法聲明 返回類型方法名(形式參數(shù))方法體內(nèi)容 (1) 方法名方法聲明包括方法名、返回類型和參數(shù)。 (2) 方

8、法體 方法體是一對大括號“”之間的內(nèi)容。【例3-1】 教材P59圖3.7 方法聲明與調(diào)用的運行結(jié)果 方法重載方法重載是指多個方法享有相同的名字,但是這些方法的參數(shù)必須不同,或者是參數(shù)的個數(shù)不同,或者是參數(shù)類型不同。返回類型不能用來區(qū)分重載的方法。 【例3-2】教材P60圖3.8重載與調(diào)用關(guān)系 【構(gòu)造方法】 構(gòu)造方法是一個特殊的方法,主要用于初始化新創(chuàng)建的對象。構(gòu)造方法的方法名要求與類名同名,而且無返回值(但不能加void修飾符)。而且,構(gòu)造方法只能通過new運算符調(diào)用,用戶不能直接調(diào)用。例子3-3(p61)使用缺省構(gòu)造方法:例子3-4(p62)3.3 對象類是一個抽象的概念,而對象是類的具體化

9、。類通過實例化生成對象。一個對象的生命周期包括三個階段: 創(chuàng)建、使用和釋放。1、對象的創(chuàng)建創(chuàng)建對象的一般格式為: 類名 對象名 = new 類名(參數(shù)列表); (1) 對象聲明: 類名 對象名; (2) 實例化: 對象名 = new 構(gòu)造方法( ); 2、 對象的使用 類是不能直接使用的,我們只能類實例化后的對象。而對象的使用是通過訪問對象變量或調(diào)用對象方法。 通過運算符“.”可以實現(xiàn)對對象的變量訪問和方法的調(diào)用。 (1) 訪問對象的變量 訪問格式: 對象名.成員變量; 例如,設(shè)有一個A類其結(jié)構(gòu)如下: class A int x; 對變量x賦值,先創(chuàng)建并實例化類A的對象a,然后再通過對象給變量

10、x: A a = new A(); a.x=5; (2) 調(diào)用對象的方法 調(diào)用格式:對象名.方法名(參數(shù)列表); 【例3-5】用帶參數(shù)的成員方法計算長方體的體積。【例3-6】用對象作為方法的參數(shù)計算圓柱體體積。(3) 釋放對象 1、java的垃圾收集器自動把沒有應(yīng)用的對 象作為垃圾手機并釋放,但優(yōu)先級比較低;2、可使用系統(tǒng)的System.gc();3、可使用finalize()方法清除對象this和super關(guān)鍵字1.this的使用(1)訪問當前對象的數(shù)據(jù)成員(2)訪問當前對象的成員變量(3)重載時用來引用同類的其他構(gòu)造方法2.super的使用(1)訪問直接基類中被隱藏的數(shù)據(jù)成員(2)調(diào)用直接

11、基類中被重寫的成員方法(3)調(diào)用直接基類的構(gòu)造方法第3章 面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)例子【3-2】例子【 IntSum 】方法參數(shù)接收3.4 面向?qū)ο筇匦詊ava語言中有三個典型的面向?qū)ο蟮奶匦裕悍庋b性、繼承性和多態(tài)性 。面向?qū)ο蟮幕咎卣鳎悍庋b定義電視的內(nèi)部結(jié)構(gòu)開電視關(guān)電視選擇頻道調(diào)節(jié)聲音,色彩對象接口面向?qū)ο蟮幕咎卣鳎悍庋b舉例“學生對象”的內(nèi)部數(shù)據(jù):個人基本信息(年齡、身高、家庭信息)在校情況(專業(yè),班級,宿舍,任職等)選修課表成績清單(考試,課程設(shè)計,畢業(yè)設(shè)計成績)入學/注冊修課/考試查詢成績畢業(yè)答辯只能通過接口來操作對象,不能隨意修改內(nèi)部數(shù)據(jù)面向?qū)ο蟮幕咎卣鳎豪^承家電類(父類)數(shù)據(jù):功率

12、 品牌 型號方法:啟動,停止電視機類(子類)數(shù)據(jù):功率 品牌 型號 尺寸 方法:啟動,停止 選頻道 調(diào)色彩聲音冰箱類(子類)數(shù)據(jù):功率 品牌 型號 容量 功能 方法:啟動,停止 調(diào)溫度,開關(guān)門自動擁有父類的數(shù)據(jù),方法新增自己需要的數(shù)據(jù)和方法繼承子類繼承其父類的所有變量和方法還可以增加自己需要的變量和方法虛框:該類的對象關(guān)于繼承性【例3-7】創(chuàng)建一個A類和它的子類B類,我們通過子類B的實例對象調(diào)用從父類A繼承的方法?!纠?-8】若子類重寫了父類的方法,則系統(tǒng)運行時調(diào)用子類的方法;若子類繼承了父類的方法(未重寫),則系統(tǒng)運行時調(diào)用父類的方法。面向?qū)ο蟮幕咎卣鳎憾鄳B(tài)家電類(父類)數(shù)據(jù):功率 品牌

13、 型號方法:啟動,停止電視機類(子類)數(shù)據(jù):功率 品牌 型號 尺寸 方法:啟動,停止 選頻道 調(diào)色彩聲音冰箱類(子類)數(shù)據(jù):功率 品牌 型號 容量 功能 方法:啟動,停止 調(diào)溫度,開關(guān)門啟動電視:顯示圖像,聲音啟動冰箱:開始制冷消息:啟動繼承多態(tài):相同的消息被送到不同的對象時有不同的實現(xiàn)面向?qū)ο蟮幕咎卣?.封裝:將數(shù)據(jù)成員(Data Member)和屬于此數(shù)據(jù)的操作方法(Operating Method),放在同一個實體(Entity)或?qū)ο笾小?.繼承:父類定義(Define)一些通用的屬性與行為,其子類繼續(xù)使用。3.多態(tài):在同一個類中可有許多同名的方法,但其參數(shù)數(shù)量與數(shù)據(jù)類型不同,而且操

14、作過程與返回值也可能會不同。(1)模塊化 (2)信息隱藏 (1)實現(xiàn)代碼復(fù)用 (2)簡化設(shè)計過程 解決其他語言中不能重名的問題 修飾符類成員包括數(shù)據(jù)成員和函數(shù)成員,類的每個成員都有一個稱為可訪問性的屬性,用來保護類成員。Java有四種類成員的保護方式,分別為缺省的、public(公有的)、protected(保護的)、private(私有的)。為了使程序具有良好易讀的風格,建議最好在撰寫類代碼時用不同的可訪問性來組織類成員,并將public成員作為對外公布的接口放在最前面,以便引起關(guān)注。限訪問修飾符關(guān)鍵字同一個類中同一個包中派生類中其他包中publicprotected無訪問修飾符關(guān)鍵字pri

15、vate修飾符static類變量和方法final常量、終類和方法native方法體可用其他語言abstract抽象類和方法syncronized線程互斥Static關(guān)鍵字用static修飾的變量或方法稱為類變量或類方法如果在聲明時用static修飾,則聲明為靜態(tài)變量和靜態(tài)方法。在調(diào)用靜態(tài)方法時,不要進行實例化而直接調(diào)用。例子【3-9】Final關(guān)鍵字修飾成員變量:常量修飾成員方法:不能被子類重寫修飾類:不能成為超類類成員和實例成員帶有static的為類屬性和類方法;不帶static的為實例屬性和實例方法。類屬性和類方法class Animal int weight;String colour;

16、 static int count=0; Animal() +count;System.out.println(The total number of Animal is:+count); public void eat() System.out.println(Eating); public static void move() System.out.println(Animal can Moving); 類屬性類方法成員屬性成員方法類屬性和類方法public class StaticTest1 public static void main( String args ) System.ou

17、t.println(The total number of Animal is:+ Animal.count);Animal.move();Animal a1=new Animal();Animal a2=new Animal(); 運行結(jié)果為:The total number of Animal is:0Animal can MovingThe total number of Animal is:1The total number of Animal is:2 實例屬性和實例方法與類屬性和類方法相比較 ,實例屬性和實例方法必須在實例化變量之后才能使用,將上例中Animal.move()換成A

18、nimal.eat(),結(jié)果如何?為什么?抽象類和抽象方法定義目的是提供可由其子類共享的一般形式。抽象類不能實例化。抽象方法沒有函數(shù)體。抽象方法必須在子類中給出具體實現(xiàn)。抽象類中可以沒有抽象方法,有抽象方法的類一定是抽象類。抽象類必須繼承,子類根據(jù)自身需要擴展抽象類。abstract不能和final疊用修飾類。不能有private成員變量和方法。不能和private、static、final疊用修飾方法。抽象類和抽象方法動物有Move方法,動物包括鳥類和魚類鳥類的Move應(yīng)該是: Flying魚類的Move應(yīng)該是: Swimming要求:設(shè)計Fish類的程序設(shè)計人員一定要覆蓋move方法,。粗

19、心大意的程序設(shè)計人員往往會忘記覆蓋某些特定的方法,造成程序運行上的錯誤。Java中提供了一個特殊的機制,能讓繼承的子類一定要覆蓋某個特殊的方法才能創(chuàng)建實例運行,這種機制就是抽象方法和抽象類。覆蓋的含義動物類數(shù)據(jù):顏色方法:運動魚類數(shù)據(jù):顏色方法:運動(游動)鳥類數(shù)據(jù):顏色方法:運動(飛翔)繼承鳥類覆蓋了動物類的“運動”方法魚類覆蓋了動物類的“運動”方法抽象類和抽象方法抽象方法:abstract public void move();抽象類(不能生成實例對象)abstract class Animalabstract這個關(guān)鍵字只能用在類和方法上,不能用在屬性和一般變量上(不包括常量)。直接以分號

20、“;”來結(jié)束,不用加上左右大括號 抽象類舉例abstract class Animal /抽象類int weight;String colour; public void eat() System.out.println(Eating); abstract public void move();/定義抽象方法class Bird extends Animal public void move() System.out.println(Flying); class Fish extends Animal public void move() System.out.println(Swimming

21、 ); public class StaticTest1public static void main(String argv)Bird b1 = new Bird(); Fish f1 = new Fish(); b1.move(); f1.move(); 運行結(jié)果為:Flying Swimming可用Animal a=new Animal()來定義實例嗎3.5 接口和包 3.5.1接口接口是抽象類的一種,只包含常量和方法的定義,而沒有變量和具體方法的實現(xiàn)。 1、 接口的定義接口的定義包括接口聲明和接口體。接口定義的格式如下:public interface 接口名extends 父接口名

22、/接口體 2、 接口的實現(xiàn) 在類的聲明中用implements子句來表示一個類使用某個接口,在類體中可以使用接口中定義的常量,而且必須實現(xiàn)接口中定義的所有方法。一個類可以實現(xiàn)多個接口,在implements子句中用逗號分開。 接口舉例 例子3-12例子3-133.5.2包 package和import語句Package 用于指出class文件路徑package class文件路徑;Import 用于引用包的類 一個包中通常有多個類,就用 * 號代替Import語句import類似于C中的include語句 Import java.io.*; Import java.applet.*;包 pac

23、kage包不僅是命名空間機制,也是訪問控制機制。 Java通過包,將命名空間分隔成很多獨立的小塊,一組相關(guān)的類和接口存放在一個獨立的包內(nèi),從而和其它包中的類或接口區(qū)分開。包的使用第一步建立和包同名的目錄。包和文件系統(tǒng)目錄一一對應(yīng),有一個包,就有一個和其對應(yīng)的文件系統(tǒng)目錄。包內(nèi)的所有類或接口都必須在與包同名的目錄下。 第二步在類或接口所在文件的最前面聲明類或接口所在的包。包的聲明格式如下:package 包名1.包名2.包名n;引用包通過import將包引入程序中,其格式如下:import 包名1. .包名n.類名;或import 包名1. .包名n.*;Java自動引入的包當前包。缺省包,缺省包是無名包。java.lang包,Java基本的語言功能保存在這個包中例:在當前建立目錄:abcxyz.Import abc.xyz.*;public class apublic static void main(String args ) b b1=new b(); b1.print(); Package abc.xyz;public class bpublic void print() System.out.println(package test); 把b.

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論