cstp培訓課件4.面向對象的特性.ppt_第1頁
cstp培訓課件4.面向對象的特性.ppt_第2頁
cstp培訓課件4.面向對象的特性.ppt_第3頁
cstp培訓課件4.面向對象的特性.ppt_第4頁
cstp培訓課件4.面向對象的特性.ppt_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

面向對象的特性,目標,有關面向對象的概念 Java的類 Java的對象 Java的面向對象特性 抽象類和接口 Inner Class 總結,面向對象的概念,面向對象程序設計圍繞的幾個主要概念: 抽象數(shù)據(jù)類型、類、類型層次(子類),封裝性,繼承性、多態(tài)性 對象,消息和方法,抽象數(shù)據(jù)類型,class Car int color_number; int door_number; int speed; void brake() void speedUp() ; void slowDown() ,抽象數(shù)據(jù)類型,類,什么是類? 類是描述對象的“基本原型”,它定義一種對象所能擁有的數(shù)據(jù)和能完成的操作,在面向對象的程序設計中,類是程序的基本單元。 程序中的對象 是類的一個實例,是一個軟件單元, 它由一組結構化的數(shù)據(jù)和 在其上的一組操作構成。,變量:即指對象的所知道的狀態(tài) 方法:指對象的功能單元。 什么是消息? 軟件對象通過相互間傳遞消息來相互作用和通信 一個消息由三部分組成: 1. 接受消息的對象 2. 要完成方法的名字 3. 方法需要的參數(shù),一個例子 在程序中操作對象是類的一個實例:即對象 創(chuàng)建一個對象 Hello obj=new Hello(); 調(diào)用方法 obj.showString(“Hello World!”),class Hello ,private String s;,public void showString () System.out.println(s); public void changeString(String str) s=str; return s;,封裝,什么是封裝? 封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數(shù)據(jù),封裝實際上使用方法將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度。,子類,什么是子類? 子類是作為另一個類的擴充或修正所定義的一個類.,bicycle,(super class),Mountain bikes,Racing bikes,Tandem bikes,sub class,繼承,繼承是子類利用父類中定義的方法和變量就像它們屬于子類本身一樣.,class Car int color_number; int door_number; int speed; push_break() add_oil() ,class Trash_Car extends Car double amount; fill_trash() ,何時選擇繼承性,一個很好的經(jīng)驗: “B是一個A嗎?” 如果是則讓B做A的子類. 常犯的錯誤:A有一個B嗎? 例如讓汽車輪子成為汽車的子類是錯誤的,方法重寫(overridden),什么是方法的覆蓋(重寫)? 在子類中重新定義父類中已有的方法,class Car int color_number; int door_number; int speed; push_break() speed=0; add_oil() ,class Trash_Car extends Car double amount; fill_trash() push_break() speed=speed-10; ,多態(tài)性(polymorphic),什么是方法的重載(多態(tài)性)? 在同一個類中至少有兩個方法用同一個名字,但有不同的參數(shù)。,類,void show(int int_num),void show(double double_num),void show(nit nit_ um, float float_um),123,1.23,123,1.23,Java 類定義,包括類聲明和類體 類聲明: publicabstract|final class className extends superclassName implements interfaceNameList ,類體定義如下: class className public | protected | private static final transient volatile type variableName; /成員變量 public | protected | private static final | abstract native synchronized returnType methodName(paramList) throws exceptionList statements /成員方法 ,成員變量,public | protected | private static final transient volatile type variableName; /成員變量 static: 靜態(tài)變量(類變量;相對于實例變量 final: 常量,成員方法,public | protected | private static final | abstract native synchronized returnType methodName(paramList) throws exceptionList /方法聲明 statements /方法體 方法聲明 static: 類方法,可通過類名直接調(diào)用 abstract: 抽象方法,沒有方法體 final: 方法不能被重寫 native: 集成其它語言的代碼 synchronized: 控制多個并發(fā)線程的訪問,成員方法(值參傳遞),public class PassTest float ptValue /全局變量 public static void main(String args) int val; PassTest pt=new PassTest(); val=1 System.out.println(“Original Int Value is:”+val); 1 pt.changedInt(val); /參數(shù)傳遞 System.out.pringln(“Int Value after Change is:” +val); 1 pt.ptValue=101f; /對象調(diào)用變量 System.out.println(“Original ptValue is:”+pt.ptValue); pt.ChangeObjValue(pt); /對象傳遞 System.out.println(“ptValue after Change is:”+pt.ptValue); public void changeInt(int value) value=55; public void changeObjValue(PassTest ref) ref.ptValue=99f; ,方法體包括局部變量的聲明以及所有合法的Java指令。 局部變量的作用域在該方法內(nèi)部。 若局部變量與類的成員變量同名,則類的成員變量被隱藏。,class Variable int x=0,y=0,z=0; /類的成員變量 void init(int x,int y) this.x=x; this.y=y; / 用this指向當前對象 int z=5; /局部變量 System.out.println(“* in init*”); System.out.(“x=”+x+“ y=”+y+“ z=”+z) ,public class VariableTest public 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(“*after init*”);,System.out.println(“x=”+v.x+ “y=”+ v.y+“z=”+v.z); ,this-用在一個方法中引用當前對象,它的值是調(diào)用該 方法的對象。 返回值須與返回類型一致,或是其子類 返回類型是接口時,返回值必須實現(xiàn)該接口。,方法重載(Method Overloading),方法重載指多個方法享有相同的方法名 區(qū)別在于:參數(shù)類型不同,或個數(shù)不同; 返回類型不能用來區(qū)分重載的方法。,class MethodOverloading void receive(int i) void receive(int x, int y) void receive(double d) void receive(String s) ,public class MethodOverloadingTest public static void main(String args) MethodOverloading mo=new MethodOverloading(); mo.receive(1); mo.receive(2,3); mo.receive(12.56); mo.receive(“very interesting, isnt it?”); ,構造方法,重載經(jīng)常用于構造方法 構造方法具有和類名相同的名稱,而且不返回任何數(shù)據(jù)類型,即沒有返回值 構造方法只能由new運算符調(diào)用 利用構造方法進行初始化 構造方法不能被繼承,class Point int x,y; Point() x=0; y=0; Point(int x, int y) this.x=x; this.y=y; ,finalize()方法,在根類java.land.Object中實現(xiàn) 對對象進行垃圾收集前,系統(tǒng)自動調(diào)用 自己重寫時需要調(diào)用父類的finalize()方法, protected void finalize() throws throwable /clean up code for this class super.finalize(); ,Java對象,類實例化可生成對象 對象通過消息傳遞來進行交互 消息傳遞即激活指定的某個對象的方法以改變其狀態(tài)或讓它產(chǎn)生一定的行為。 public class HelloWorldApp public static void main(String args) System.out.println(“hello”); ,對象的生命周期,生成 使用 清除,實例化對象的過程,包括聲明、實例化和初始化 格式: type objectName=new type(paramlist); (1)聲明:type objectName 聲明并不為對象分配內(nèi)存空間,而只是分配一個引用空間; (2)實例化:運算符new為對象分配內(nèi)存空間,它調(diào)用對象的構造方法,返回引用;一個類的不同對象分別占據(jù)不同的內(nèi)存空間。,(3)生成:執(zhí)行構造方法,進行初始化;根據(jù)參數(shù)不同調(diào)用相應的構造方法。 對象的引用指向一個中間的數(shù)據(jù)結構,它存儲有關數(shù)據(jù)類型的信息以及當前對象所在的堆的地址,而對于對象所在的實際的內(nèi)存地址是不可操作的,這就保證了安全性。 通過運算符“.”可以實現(xiàn)對變量的訪問和方法的調(diào)用。 設定訪問權限來限制其它對象對它的訪問,調(diào)用對象的變量,格式:objectReference.variabl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論