




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、.OOP技術(shù):面向?qū)ο蠹夹g(shù)教案名稱:教案大?。航贪割愋停篧ORD文檔星級評定:教案簡介:類是Java語言面向?qū)ο缶幊痰幕驹?,它定義了一個對象的結(jié)構(gòu)和功能。 Java類中包含成員變量和成員方法。成員變量有兩種,用static 關(guān)鍵字修飾的變量為類變量,無static 修飾的變量為實例變量。相應(yīng)地,成員方法也有兩種,用static 修飾的為類方法,無static修飾的為實例方法。實例方法不僅可以對當前對象的實例變量進行操作,也可以對類變量進行操作;但類方法只能訪問類變量。實例變量和實例方法必須由實例對象來調(diào)用,而類變量和類方法不僅可由實例對象來調(diào)用,還可由類名直接調(diào)用。Java通過在類定義的大
2、括號里聲明變量來把數(shù)據(jù)封裝在一個類里,這里的變量稱為成員變量。為了解決類名可能相同的問題,java 中提供包來管理類名空間。封裝性、繼承性和多態(tài)性是java語言中面向?qū)ο蟮娜齻€特性。下載一第三章 面向?qū)ο蠹夹g(shù)【課前思考】1 什么是對象?什么是類? 2 面向?qū)ο缶幊痰奶匦杂心娜齻€?它們各自又有哪些特性?3 你知道java語言在面向?qū)ο缶幊谭矫嬗泻为毺氐奶攸c嗎?【學(xué)習(xí)目標】本講主要講述了java語言的面向?qū)ο蠹夹g(shù),包括面向?qū)ο蟮幕靖拍?、面向?qū)ο蟮某绦蛟O(shè)計方法及java中的類、包、對象、的特性。通過本講的學(xué)習(xí),同學(xué)們可以使用面向?qū)ο蠹夹g(shù)編寫java程序?!緦W(xué)習(xí)指南】應(yīng)深刻理解各知識點的概念,使用上
3、一講的編程基礎(chǔ)知識及面向?qū)ο蠹夹g(shù),編寫簡單的java類,由淺至深,養(yǎng)成風(fēng)格良好的編程習(xí)慣?!倦y 重 點】 重點:1 仔細體會面向?qū)ο缶幊痰乃枷?,熟練理解類和對象的概念,理解面向?qū)ο蟮奶匦裕瑫帉懞唵蔚念悾饾u掌握面向?qū)ο缶幊痰姆椒ā? 注意java語言中,不允許多重繼承,以及類變量和類方法的使用。難點:1 理解方法重載和方法重寫,不要混淆了兩者的使用。2 類變量和類方法的使用?!局?識 點】31 面向?qū)ο蠹夹g(shù)基礎(chǔ) 311 面向?qū)ο蟮幕靖拍?312 面向?qū)ο蟮幕咎卣?313 面向?qū)ο蟮某绦蛟O(shè)計方法32 Java語言的面向?qū)ο筇匦?321 類 322 對象323面向?qū)ο筇匦?1 面向?qū)ο蠹夹g(shù)基
4、礎(chǔ)311 面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮幕舅枷朊嫦驅(qū)ο笫且环N新興的程序設(shè)計方法,或者是一種新的程序設(shè)計規(guī)范(paradigm),其基本思想是使用對象、類、繼承、封裝、消息等基本概念來進行程序設(shè)計。從現(xiàn)實世界中客觀存在的事物(即對象)出發(fā)來構(gòu)造軟件系統(tǒng),并且在系統(tǒng)構(gòu)造中盡可能運用人類的自然思維方式。開發(fā)一個軟件是為了解決某些問題,這些問題所涉及的業(yè)務(wù)范圍稱作該軟件的問題域。其應(yīng)用領(lǐng)域不僅僅是軟件,還有計算機體系結(jié)構(gòu)和人工智能等。1 對象的基本概念對象是系統(tǒng)中用來描述客觀事物的一個實體,它是構(gòu)成系統(tǒng)的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務(wù)組成。從更抽象的角度來說,對象是問題
5、域或?qū)崿F(xiàn)域中某些事物的一個抽象,它反映該事物在系統(tǒng)中需要保存的信息和發(fā)揮的作用;它是一組屬性和有權(quán)對這些屬性進行操作的一組服務(wù)的封裝體??陀^世界是由對象和對象之間的聯(lián)系組成的。主動對象是一組屬性和一組服務(wù)的封裝體,其中至少有一個服務(wù)不需要接收消息就能主動執(zhí)行(稱作主動服務(wù))。2 類的基本概念把眾多的事物歸納、劃分成一些類是人類在認識客觀世界時經(jīng)常采用的思維方法。分類的原則是抽象。類是具有相同屬性和服務(wù)的一組對象的集合,它為屬于該類的所有對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和服務(wù)兩個主要部分。在面向?qū)ο蟮木幊陶Z言中,類是一個獨立的程序單位,它應(yīng)該有一個類名并包括屬性說明和服務(wù)說明兩個主要部分
6、。類與對象的關(guān)系就如模具和鑄件的關(guān)系,類的實例化結(jié)果就是對象,而對一類對象的抽象就是類。3 消息消息就是向?qū)ο蟀l(fā)出的服務(wù)請求,它應(yīng)該包含下述信息:提供服務(wù)的對象標識、服務(wù)標識、輸入信息和回答信息。服務(wù)通常被稱為方法或函數(shù)。312 面向?qū)ο蟮幕咎卣?封裝性封裝性就是把對象的屬性和服務(wù)結(jié)合成一個獨立的相同單位,并盡可能隱蔽對象的內(nèi)部細節(jié),包含兩個含義: 把對象的全部屬性和全部服務(wù)結(jié)合在一起,形成一個不可分割的獨立單位(即對象)。 信息隱蔽,即盡可能隱蔽對象的內(nèi)部細節(jié),對外形成一個邊界或者說形成一道屏障,只保留有限的對外接口使之與外部發(fā)生聯(lián)系。封裝的原則在軟件上的反映是:要求使對象以外的部分不能隨
7、意存取對象的內(nèi)部數(shù)據(jù)(屬性),從而有效的避免了外部錯誤對它的"交叉感染",使軟件錯誤能夠局部化,大大減少查錯和排錯的難度。2繼承性特殊類的對象擁有其一般類的全部屬性與服務(wù),稱作特殊類對一般類的繼承。例如,輪船、客輪;人、大人。一個類可以是多個一般類的特殊類,它從多個一般類中繼承了屬性與服務(wù),這稱為多繼承。例如,客輪是輪船和客運工具的特殊類。在java語言中,通常我們稱一般類為父類(superclass,超類),特殊類為子類(subclass)。3多態(tài)性對象的多態(tài)性是指在一般類中定義的屬性或服務(wù)被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個屬性或服務(wù)
8、在一般類及其各個特殊類中具有不同的語義。例如:"幾何圖形"的"繪圖"方法,"橢圓"和"多邊形"都是"幾何圖"的子類,其"繪圖"方法功能不同。313 面向?qū)ο蟪绦蛟O(shè)計方法OOAObject Oriented Analysis 面向?qū)ο蟮姆治鯫ODObject Oriented Design 面向?qū)ο蟮脑O(shè)計OOIObject Oriented Implementation 面向?qū)ο蟮膶崿F(xiàn)32 Java語言的面向?qū)ο筇匦?21 類類是java中的一種重要的復(fù)合數(shù)據(jù)類型,是組成jav
9、a程序的基本要素。它封裝了一類對象的狀態(tài)和方法,是這一類對象的原形。一個類的實現(xiàn)包括兩個部分:類聲明和類體。1類聲明:publicabstract|final class className extends superclassName implements interfaceNameList其中,修飾符public,abstract,final 說明了類的屬性,className為類名,superclassName為類的父類的名字,interfaceNameList為類所實現(xiàn)的接口列表。2類體類體定義如下:class classNamepublic | protected | private
10、 static final transient volatile typevariableName;/成員變量public | protected | private staticfinal | abstract native synchronizedreturnType methodName(paramList) throws exceptionListstatements /成員方法3成員變量成員變量的聲明方式如下:public | protected | private static final transient volatile typevariableName; /成員變量其中,s
11、tatic: 靜態(tài)變量(類變量);相對于實例變量final: 常量transient: 暫時性變量,用于對象存檔volatile: 貢獻變量,用于并發(fā)線程的共享4成員方法方法的實現(xiàn)包括兩部分內(nèi)容:方法聲明和方法體。public | protected | private staticfinal| abstract native synchronizedreturnType methodName(paramList)throws exceptionList /方法聲明statements /方法體方法聲明中的限定詞的含義:static: 類方法,可通過類名直接調(diào)用abstract: 抽象方法,沒
12、有方法體final: 方法不能被重寫native: 集成其它語言的代碼synchronized: 控制多個并發(fā)線程的訪問 方法聲明方法聲明包括方法名、返回類型和外部參數(shù)。其中參數(shù)的類型可以是簡單數(shù)據(jù)類型,也可以是復(fù)合數(shù)據(jù)類型(又稱引用數(shù)據(jù)類型)。對于簡單數(shù)據(jù)類型來說,java實現(xiàn)的是值傳遞,方法接收參數(shù)的值,但不能改變這些參數(shù)的值。如果要改變參數(shù)的值,則用引用數(shù)據(jù)類型,因為引用數(shù)據(jù)類型傳遞給方法的是數(shù)據(jù)在內(nèi)存中的地址,方法中對數(shù)據(jù)的操作可以改變數(shù)據(jù)的值。例3-1說明了簡單數(shù)據(jù)類型與引用數(shù)據(jù)的區(qū)別?!纠?-1】import java.io.*;public class PassTestfloat
13、 ptValue;public static void main(String args) int val;PassTest pt=new PassTest();val=11;System.out.println("Original Int Value is:"+val); pt.changeInt(val); /值參數(shù)System.out.println("Int Value after Change is:" +val); /*值參數(shù) 值的修改,沒有影響值參數(shù)的值*/pt.ptValue=101f;System.out.println("O
14、riginal ptValue is:"+pt.ptValue);pt.changeObjValue(pt); /引用類型的參數(shù)System.out.println("ptValue after Change is:"+pt.ptValue);/* 引用參數(shù)值的修改,改變了引用參數(shù)的值*/ public void changeInt(int value)value=55; /在方法內(nèi)部對值參數(shù)進行了修改public void changeObjValue(PassTest ref)ref.ptValue=99f; /在方法內(nèi)部對引用參數(shù)進行了修改查看運行結(jié)果 方法
15、體方法體是對方法的實現(xiàn),它包括局部變量的聲明以及所有合法的Java指令。方法體中聲明的局部變量的作用域在該方法內(nèi)部。若局部變量與類的成員變量同名,則類的成員變量被隱藏。例3-2 說明了局部變量z和類成員變量z的作用域是不同的。【例3-2】import java.io.*;class Variableint x=0,y=0,z=0; /類的成員變量void init(int x,int y) this.x=x; this.y=y; int z=5; /局部變量System.out.println("* in init*");System.out.println("x
16、="+x+" y="+y+" z="+z); public class VariableTestpublic static void main(String args)Variable v=new Variable();System.out.println("*before init*");System.out.println("x="+v.x+" y="+ v.y+" z="+v.z);v.init(20,30);System.out.println("
17、*after init*");System.out.println("x="+v.x+ " y="+ v.y+" z="+v.z);上例中我們用到了this,這是因為init()方法的參數(shù)名與類的成員變量x,y的名字相同,而參數(shù)名會隱藏成員變量,所以在方法中,為了區(qū)別參數(shù)和類的成員變量,我們必須使用this。this-用在一個方法中引用當前對象,它的值是調(diào)用該方法的對象。返回值須與返回類型一致,或者完全相同,或是其子類。當返回類型是接口時,返回值必須實現(xiàn)該接口。5方法重載方法重載是指多個方法享有相同的名字,但是這些方法的參數(shù)
18、必須不同,或者是參數(shù)的個數(shù)不同,或者是參數(shù)類型不同。返回類型不能用來區(qū)分重載的方法。參數(shù)類型的區(qū)分度一定要足夠,例如不能是同一簡單類型的參數(shù),如int與long?!纠?-3】import java.io.*;class MethodOverloadingvoid receive(int i) System.out.println("Receive one int data");System.out.println("i="+i);void receive(int x, int y) System.out.println("Receive two
19、 int datas");System.out.println("x="+x+" y="+y);public class MethodOverloadingTestpublic static void main(String args) MethodOverloading mo=new MethodOverloading();mo.receive(1);mo.receive(2,3);6 構(gòu)造方法 構(gòu)造方法是一個特殊的方法。Java 中的每個類都有構(gòu)造方法,用來初始化該類的一個對象。 構(gòu)造方法具有和類名相同的名稱,而且不返回任何數(shù)據(jù)類型。 重載
20、經(jīng)常用于構(gòu)造方法。 構(gòu)造方法只能由new運算符調(diào)用【例3-4】class Pointint x,y;Point()x=0; y=0;Point(int x, int y)this.x=x; this.y=y;322 對象類實例化可生成對象,對象通過消息傳遞來進行交互。消息傳遞即激活指定的某個對象的方法以改變其狀態(tài)或讓它產(chǎn)生一定的行為。一個對象的生命周期包括三個階段:生成、使用和消除。1. 對象的生成對象的生成包括聲明、實例化和初始化。格式為:type objectName=new type(paramlist); 聲明:type objectName 聲明并不為對象分配內(nèi)存空間,而只是分配一個
21、引用空間;對象的引用類似于指針,是32位的地址空間,它的值指向一個中間的數(shù)據(jù)結(jié)構(gòu),它存儲有關(guān)數(shù)據(jù)類型的信息以及當前對象所在的堆的地址,而對于對象所在的實際的內(nèi)存地址是不可操作的,這就保證了安全性。 實例化:運算符new為對象分配內(nèi)存空間,它調(diào)用對象的構(gòu)造方法,返回引用;一個類的不同對象分別占據(jù)不同的內(nèi)存空間。 生成:執(zhí)行構(gòu)造方法,進行初始化;根據(jù)參數(shù)不同調(diào)用相應(yīng)的構(gòu)造方法。2. 對象的使用通過運算符"."可以實現(xiàn)對變量的訪問和方法的調(diào)用。變量和方法可以通過設(shè)定訪問權(quán)限來限制其它對象對它的訪問。調(diào)用對象的變量格式:objectReference.variableobjectR
22、eference是一個已生成的對象,也可以是能生成對象的表達式例:p.x= 10;tx=new Point( ).x;調(diào)用對象的方法格式:objectReference.methodName(paramlist);例如:p.move(30,20);new Point( ).move(30,20);3. 對象的清除當不存在對一個對象的引用時,該對象成為一個無用對象。Java的垃圾收集器自動掃描對象的動態(tài)內(nèi)存區(qū),把沒有引用的對象作為垃圾收集起來并釋放。System.gc( );當系統(tǒng)內(nèi)存用盡或調(diào)用System.gc( )要求垃圾回收時,垃圾回收線程與系統(tǒng)同步運行。323 面向?qū)ο筇匦詊ava語言中
23、有三個典型的面向?qū)ο蟮奶匦裕悍庋b性、繼承性和多態(tài)性,下面將詳細闡述。1 封裝性java語言中,對象就是對一組變量和相關(guān)方法的封裝,其中變量表明了對象的狀態(tài),方法表明了對象具有的行為。通過對象的封裝,實現(xiàn)了模塊化和信息隱藏。通過對類的成員施以一定的訪問權(quán)限,實現(xiàn)了類中成員的信息隱藏。 類體定義的一般格式:class className public | protected | private static final transient volatile typevariableName; /成員變量public | protected | private staticfinal | abstr
24、act native synchronizedreturnType methodName(paramList)throws exceptionListstatements /成員方法 java類中的限定詞java語言中有四種不同的限定詞,提供了四種不同的訪問權(quán)限。1) private 類中限定為private的成員,只能被這個類本身訪問。如果一個類的構(gòu)造方法聲明為private,則其它類不能生成該類的一個實例。2) default類中不加任何訪問權(quán)限限定的成員屬于缺省的(default)訪問狀態(tài),可以被這個類本身和同一個包中的類所訪問。3) protected類中限定為protected的成員
25、,可以被這個類本身、它的子類(包括同一個包中以及不同包中的子類)和同一個包中的所有其他的類訪問。4) public類中限定為public的成員,可以被所有的類訪問。表3-1列出了這些限定詞的作用范圍。【表3-1】java中類的限定詞的作用范圍比較同一個類同一個包 不同包的子類 不同包非子類private*default *protected*public*2 繼承性通過繼承實現(xiàn)代碼復(fù)用。Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。繼承而得到的類稱為子類,被繼承的類稱為父類。子類不能繼承父類中訪問權(quán)限為private的成員變量和方法。子類可以重寫父類的方法
26、,及命名與父類同名的成員變量。但Java不支持多重繼承,即一個類從多個超類派生的能力。 創(chuàng)建子類格式:class SubClass extends SuperClass 成員變量的隱藏和方法的重寫子類通過隱藏父類的成員變量和重寫父類的方法,可以把父類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。例如:class SuperClassint x; void setX( ) x=0; class SubClass extends SuperClassint x; /隱藏了父類的變量xvoid setX( ) /重寫了父類的方法 setX()x=5; .注意:子類中重寫的方法和父類中被重寫的方法要具有相同的名
27、字,相同的參數(shù)表和相同的返回類型,只是函數(shù)體不同。 superjava中通過super來實現(xiàn)對父類成員的訪問,super用來引用當前對象的父類。Super 的使用有三種情況:1)訪問父類被隱藏的成員變量,如:super.variable; 2)調(diào)用父類中被重寫的方法,如:super.Method(paramlist);3)調(diào)用父類的構(gòu)造函數(shù),如:super(paramlist);【例3-5】import java.io.*;class SuperClassint x;SuperClass( ) x=3;System.out.println("in SuperClass : x=&qu
28、ot; +x);void doSomething( ) System.out.println("in SuperClass.doSomething()");class SubClass extends SuperClass int x;SubClass( ) super( ); /調(diào)用父類的構(gòu)造方法x=5;/super( ) 要放在方法中的第一句System.out.println("in SubClass :x="+x);void doSomething( ) super.doSomething( ); /調(diào)用父類的方法System.out.print
29、ln("in SubClass.doSomething()");System.out.println("super.x="+super.x+" sub.x="+x);public class Inheritance public static void main(String args) SubClass subC=new SubClass();subC.doSomething();3 多態(tài)性在java語言中,多態(tài)性體現(xiàn)在兩個方面:由方法重載實現(xiàn)的靜態(tài)多態(tài)性(編譯時多態(tài))和方法重寫實現(xiàn)的動態(tài)多態(tài)性(運行時多態(tài))。1) 編譯時多態(tài)在編譯
30、階段,具體調(diào)用哪個被重載的方法,編譯器會根據(jù)參數(shù)的不同來靜態(tài)確定調(diào)用相應(yīng)的方法。2) 運行時多態(tài)由于子類繼承了父類所有的屬性(私有的除外),所以子類對象可以作為父類對象使用。程序中凡是使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調(diào)用子類的方法。 重寫方法的調(diào)用原則:java運行時系統(tǒng)根據(jù)調(diào)用該方法的實例,來決定調(diào)用哪個方法。對子類的一個實例,如果子類重寫了父類的方法,則運行時系統(tǒng)調(diào)用子類的方法;如果子類繼承了父類的方法(未重寫),則運行時系統(tǒng)調(diào)用父類的方法。在例3-6中,父類對象a引用的是子類的實例,所以,java運行時調(diào)用子類B的callme方法?!纠?-6】
31、import java.io.*;class Avoid callme( ) System.out.println("Inside A's callme()method"); class B extends Avoid callme( ) System.out.println("Inside B's callme() Method"); public class Dispatchpublic static void main(String args) A a=new B();a.callme( ); 方法重寫時應(yīng)遵循的原則:1)改寫后的方
32、法不能比被重寫的方法有更嚴格的訪問權(quán)限(可以相同)。2)改寫后的方法不能比重寫的方法產(chǎn)生更多的例外。4 其它 final 關(guān)鍵字final 關(guān)鍵字可以修飾類、類的成員變量和成員方法,但final 的作用不同。1) final 修飾成員變量:final修飾變量,則成為常量,例如final type variableName;修飾成員變量時,定義時同時給出初始值,而修飾局部變量時不做要求。2) final 修飾成員方法:final修飾方法,則該方法不能被子類重寫final returnType methodName(paramList)3) final 類: final修飾類,則類不能被繼承fin
33、al class finalClassName 實例成員和類成員用static 關(guān)鍵字可以聲明類變量和類方法,其格式如下:static type classVar;static returnType classMethod(paramlist) 如果在聲明時不用static 關(guān)鍵字修飾,則聲明為實例變量和實例方法。1) 實例變量和類變量每個對象的實例變量都分配內(nèi)存,通過該對象來訪問這些實例變量,不同的實例變量是不同的。類變量僅在生成第一個對象時分配內(nèi)存,所有實例對象共享同一個類變量,每個實例對象對類變量的改變都會影響到其它的實例對象。類變量可通過類名直接訪問,無需先生成一個實例對象,也可以通過實例對象訪問類變量。2
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025勞動合同風(fēng)險揭秘:求職者必看
- 煤炭生產(chǎn)經(jīng)營單位(安全生產(chǎn)管理人員)考試題及答案
- 2025科技創(chuàng)新型中小企業(yè)貸款貼息項目合同(官方范本)
- 《2025地板供貨合同》
- 2025金融合同資產(chǎn)配置委托代理合同
- 2025企業(yè)借款合同及借條
- (三模)內(nèi)江市2025屆高三第三次模擬考物理試題(含答案)
- 《企業(yè)稅收優(yōu)惠》課件
- 2025標準版溫室大棚租賃合同范本
- 什么是6校聯(lián)考試卷及答案
- 商洛市寶恒礦業(yè)有限公司商洛市商州區(qū)東窯溝鉛鋅礦礦山地質(zhì)環(huán)境保護與土地復(fù)墾方案
- 腳手架詳細計算書
- 先導(dǎo)化合物的優(yōu)化課件
- 中學(xué)生心理危機識別與預(yù)防- 班主任技能培訓(xùn)課件
- 征信查詢委托書(共4篇)
- 銷售談判技巧課件
- PADI開放水域潛水員理論考試A卷
- golf高爾夫介紹課件
- 物業(yè)管理服務(wù)品質(zhì)檢查表
- 六年級下冊第五單元16表里的生物-表里的生物-學(xué)習(xí)任務(wù)單
- JJF 1318-2011 影像測量儀校準規(guī)范-(高清現(xiàn)行)
評論
0/150
提交評論