版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、Java面向?qū)ο蟪绦蛟O(shè)計,主講教師:鄭大慶 上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,第七講 Java面向?qū)ο筇攸c,2,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,JAVA中的OOP,幾個概念 類:抽象的集合概念 系統(tǒng)類庫中已定義好的類 用戶自定義的類 對象(實例,instance):實際個體 創(chuàng)建某個類的具體對象(類似變量聲明) 類名欲創(chuàng)建的對象名 new 類名( 參數(shù)表 ) ; 例如:String s = new String( “Hello!” ) ; Date d=new Date(2007,07,30); 繼承、子類、父類,3,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,JAVA中的OOP(續(xù)),Java中類的
2、組織結(jié)構(gòu) 基類:所有Java類都派生自O(shè)bject Java的類可組織在包(package)中 Java提供的標(biāo)準(zhǔn)類庫分布在一系列的包中,如java.lang(系統(tǒng)自動調(diào)入),java.util,等 編程的過程就是繼承基類或標(biāo)準(zhǔn)類而創(chuàng)建、定義特殊子類的過程,4,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,JAVA 中類的結(jié)構(gòu), 類修飾符 class 類名 extends 超類名 implements 接口名 成員變量定義;/表示類和對象的狀態(tài) 構(gòu)造方法定義;/構(gòu)造和初始化新對象 方法定義;/實現(xiàn)類和對象的行為 ,類聲明部分,類體部分,5,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,類的例子:,class Empl
3、oyee String name; String designation; String department; public Employee(String eName, String eDesign, String eDept) name = eName; designation = eDesign; department = eDept; void showInfo( ) System.out.println(name+ is a + designation+ at +department+.); ,把雇員的共同數(shù)據(jù)及其操作方法抽象出來,封裝為Employee類。,6,上海財經(jīng)大學(xué) 信息
4、管理與工程學(xué)院,類的例子:續(xù),public class ClassAndObject /程序的主類 public static void main(String args) Employee e1 = new Employee (“Robert ”,“Manager”,“Coffee shop” );/對象初始化 Employee e2 = new Employee (Tom ,Worker,Coffee shop ); /對象初始化 e1. showInfo(); e2. showInfo(); ,Robert is a Manager at Coffee shop. Tom is a Wo
5、rker at Coffee shop.,程序運行結(jié)果:,定義主類,并使用Employee類。,7,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,JAVA 中類的聲明,類修飾符(Modifier): public:允許其他類(沒有限制)訪問本類; abstract:沒有實例的抽象概念類(如:shape類),只能創(chuàng)建其子類的實例。目的:使類的結(jié)構(gòu)清晰,實現(xiàn)多態(tài); final:不能再被擴展,不包含子類的類;易于安全性的實現(xiàn),或用于創(chuàng)建固定功能的類; 缺?。嚎杀划?dāng)前包中的其他類訪問 父類繼承聲明:extends 父類名 實現(xiàn)接口(interface):implements 接口,8,上海財經(jīng)大學(xué) 信息管理與工程
6、學(xué)院,JAVA 中類的聲明(續(xù)),例: public abstract class shape class rectangle extends shape final class round_rect extends rectangle ,?final可以與abstract一起使用嗎?,9,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,類的成員變量的聲明,聲明成員變量member的語法 修飾符 數(shù)據(jù)類型 變量名; 修飾符 成員變量的訪問控制符 public:可被所有其他類訪問 protected:該類自身、子類、同一包中的其他類 缺?。嚎杀槐景械念愒L問 private:僅可被該類自身訪問和修改,不能被其
7、他任何類(包括子類)訪問,10,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,類的封裝與數(shù)據(jù)隱藏,用private將類內(nèi)部成員變量隱藏起來,只允許類自身的方法對其操作。通過設(shè)置public/protected/default的方法權(quán)限,將這些類的方法作為對外的接口裸露出來,使外界只能通過這些方法來訪問類的數(shù)據(jù)。 例4-2。,11,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,成員變量的聲明(續(xù)),static :類成員變量(靜態(tài)變量),對所有的實例一致,引用時前綴可使用類名或?qū)ο竺?final:程序中不能修改其值,即常量,定義的同時應(yīng)對其進行初始化 transient :非永久存儲變量 volatile :并發(fā)控制
8、引用:對象名.變量; 類名或?qū)ο竺?靜態(tài)變量,12,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,成員變量的聲明:例,class Circle private float radius; protected float area; static float max_area100.0f; final float PI=3.14f; . ,13,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,方法:語法結(jié)構(gòu),14,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,方法的定義,方法的作用:定義對類的成員變量(數(shù)據(jù))的操作 方法的定義語法: 修飾符 返回類型 方法名(參數(shù)列表) throws 例外名 方法體; 聲明內(nèi)容:方法的性質(zhì)、接受哪些
9、參數(shù)、返回什么信息,方法聲明部分,方法體部分,15,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,方法的聲明(續(xù)),修飾符(Modifier): 訪問控制符: public、private、protected、缺省-被本包中的類引用 static:靜態(tài)方法,又稱類方法 使用類名或?qū)ο竺鳛榍熬Y,建議使用類名作前綴 在static型的方法體中,只能訪問static變量和自身局部變量 優(yōu)點:不必對類實例化操作就能被其他類使用該方法??砷_發(fā)通用工具,如數(shù)學(xué)計算: Math.sqrt( ) abstract:只有方法名,沒有方法體,要在子類中通過重新定義(override)來實現(xiàn) final:不能被子類所重新定義
10、(override)(如triangle類的求重心方法) native:其他語言實現(xiàn) synchronized:并發(fā)線程控制,16,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,方法的聲明(續(xù)),返回類型: return 、 void(無返回值) 參數(shù)列表:參數(shù)類型可為類類型 throws: 通告本方法中會產(chǎn)生的例外(異常)類型,提醒調(diào)用者要對相應(yīng)的可能例外進行處理。當(dāng)執(zhí)行此方法并發(fā)生了例外時,程序會轉(zhuǎn)入調(diào)用者編制的例外處理程序段。,17,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,方法體,在方法體中定義的變量稱為局部變量。 其生命周期:程序流執(zhí)行進入方法體時創(chuàng)建,程序流退出方法時撤消。 局部變量使用之前必須初始化
11、。 局部變量名若與類的成員變量名相同,則后者被隱藏(需用this顯露,例4-3)。 在方法體中可以訪問本類所有的類變量,可以調(diào)用本類中定義的其它方法(其中,static方法只能直接調(diào)用本類的static方法和static變量)。,18,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,方法的定義(例),例: class Circle private int radius; static float max_area =100.0f; public void set_radius(int my_radius) radius= my_ radius; public int get_radius( ) return
12、 radius; public static void setMA(float my_ MA) max_area= my_ MA; /在static型的方法體中,只能訪問static變量和本方法內(nèi)的局部變量,19,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,方法的參數(shù),方法的參數(shù)要“有名有型”,參數(shù)的作用域在本方法中,在方法體中可以象方法內(nèi)的局部變量一樣使用。 方法調(diào)用中,基本類型參數(shù)是值傳遞 。方法是傳值的,方法調(diào)用不會改變實參的值。,20,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,引用類型 值傳送,基本類型 值傳送,地址傳送,值傳送與地址傳送,3.14,3.14,A,B,3.14,A,B,0 x2F,0 x
13、2F,A,B,方法定義:如 void method(int B) 形參 方法調(diào)用:如 my_instance.method(A) 實參,例4-4,21,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,22,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,23,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,各變量的作用域,成員變量的作用空間,局部變量的作用空間,方法參數(shù)的作用空間,異常處理參數(shù)的作用空間,24,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,25,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,例:銀行業(yè)務(wù)的面向?qū)ο笤O(shè)計,要求:處理帳戶存取款、查詢帳戶和開戶日期等 面向?qū)ο蟮姆治觯∣OA) 對象模型抽象:銀行帳戶 對象模型分析: 余額、存、取、查
14、 面向?qū)ο蟮脑O(shè)計(OOD) 對象模型的實現(xiàn):類及其成員定義 BankAccount類 balance, interest_rate等成員 getBalance(), deposit(), etc,26,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,例:銀行業(yè)務(wù),銀行帳戶類BankAccount,主類UseAccount,UseAccount.java,27,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,class BankAccount /銀行賬戶類 private float balance; /默認(rèn)初值為0 private float interest_rate; private int day,month,ye
15、ar; public float get_balance( )return balance;/查詢余額 public void deposit (float money) balance+=money ;/存錢方法 public class UseAccount /主類 public static void main( String args) BankAccount myAccount=new BankAccount( ); myAccount.deposit (1000.0f); System.out.println(“本賬戶余額為:$ +myAccount.get_balance();
16、,例:銀行業(yè)務(wù),本賬戶余額為:$1000.0,程序運行結(jié)果:,28,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,class BankAccount /銀行賬戶類 private float balance; private float interest_rate; private Date start_date=new Date(); public float get_balance( )return balance; public float get_interest_rate ( )return interest_rate ; public Date get_start_date( )return
17、start_date;/注意返回值類型 public void set_start_date(int d,int m, int y ) class Date /日期類 private int day=25, month=10,year=2002; public String showDate( ) return year+-+month +- +day; public class UseAccount /主類 public static void main( String args) BankAccount myAccount=new BankAccount( ); System.out.pr
18、intln(本賬戶開戶日期為: +myAccount.get_start_date().showDate(); ,本賬戶開戶日期為:2002-10-25,程序運行結(jié)果:,29,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,類的定義(封裝)小結(jié),把邏輯上相關(guān)聯(lián)的數(shù)據(jù)封裝成新的類來使用。類中的數(shù)據(jù)可隱藏為private型,而使用public型的方法來操作數(shù)據(jù)并作為對外的訪問接口。 不要定義太龐大的類,要把無關(guān)的功能適當(dāng)分離,分解為邏輯清晰的多個類:可定義A類的實例作為B類的成員變量,如上例中的Date 。 培養(yǎng)良好的編程風(fēng)格(標(biāo)識符命名,縮進),提高可讀性,可維護性。,30,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,
19、類的定義實驗,實驗3:編寫一個復(fù)數(shù)類,具有實部、虛部2個成員變量,可以完成加、減、乘、除、獲得實部和虛部等方法。另編寫一個主類,在主類中創(chuàng)建2個復(fù)數(shù)對象并對其進行加、減、乘、除運算。 作業(yè)3:對圖書館的書籍借閱情況進行面向?qū)ο蟮姆治觯_整理出書籍類和學(xué)生類等所應(yīng)具有的數(shù)據(jù)和方法,能完成“借書”操作。設(shè)計其類并給予必要的說明。(截至?xí)r間),31,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,復(fù)數(shù)的四則運算法則,在數(shù)學(xué)里,將平方是負(fù)數(shù)的數(shù)定義為純虛數(shù)。所有的虛數(shù)都是復(fù)數(shù)。這種數(shù)有一個專門的符號“i”(imaginary),它稱為虛數(shù)單位。定義為i2=-1 復(fù)數(shù)的四則運算規(guī)定為: (abi)(cdi)(ac)
20、(bd)i, (abi)(cdi)(ac)(bd)i, (abi)(cdi)(acbd)(bcad)i, (c與d不同時為零) (abi)(cdi)(ac+bd/c2+d2)(bcad/c2+d2) (c+di)不等于0 復(fù)數(shù)有多種表示形式,常用形式 zabi 叫做代數(shù)式。,32,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,方法重載(overloading),用同一個名字來表示不同的方法。 這些方法同名的原因,是因為它們的最終功能和目的都相同,但由于在完成同一功能時,可能遇到不同的具體情況,所以需要定義含不同的具體內(nèi)容的方法。 是多態(tài)的一種體現(xiàn)。 (多態(tài)包括方法的重載和覆蓋),33,上海財經(jīng)大學(xué) 信息管
21、理與工程學(xué)院,方法重載的類型,定義、調(diào)用時如何區(qū)別被重載的方法 不同類中的同名方法:冠以類名或?qū)ο竺允緟^(qū)別 如:Chinese.speak();American.speak() 同類中的同名方法:用不同的參數(shù)列表來區(qū)別,34,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,同類中的方法重載:例,要打印不同類型的數(shù)據(jù),如int, float, String等,實現(xiàn)手段有2種: 分別定義不同名的多個方法,如: printInt(int); printFloat(float); printString(String)等 但這樣給程序開發(fā)、使用和維護都帶來很多麻煩。 使用一個方法名print (),通過區(qū)別不同的
22、參數(shù),來分別定義和調(diào)用不同方法:即,方法重載 如:print (int i); print (float f); print (String s);,35,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,方法重載的條件,方法名必須相同 方法的參數(shù)必須不同(同名不同方法是靠不同形式的參數(shù)列表來區(qū)分,包括形參的個數(shù)、類型、順序的不同)。 static void print(String s, int i) static void print(int i, String s) /注意,以上二者參數(shù)的順序不同,36,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,方法重載的特點,返回類型、修飾符可相同或不相同。(返回類型可以不同
23、,但不是重載的標(biāo)志。) 效果:利用“重名”現(xiàn)象提高程序的抽象度和簡潔性。 編譯時多態(tài)。(由編譯器在編譯時根據(jù)參數(shù)的區(qū)別,來調(diào)用相應(yīng)的方法體),37,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,this 只能在方法中使用,表示當(dāng)前對象。 public class MyDate private int day=10; private int month=10; private int year=2010; public MyDate(int day,int month,int year) this.day = day; /如果不加this會有何結(jié)果? this.month = month; this.yea
24、r = year; public String tommorrow() this.day = this.day+1; /如果不加this會有何結(jié)果? return this.day+/+this.month+/+this.year; public static void main( String args) MyDate d = new MyDate(12,4,2004); System.out.println(d.tommorrow(); ,“this ”引用,類變量day被屏蔽,沒有影響,38,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,構(gòu)造方法(constructor),問題的提出 Java試圖在
25、每個對象一誕生時,就給它一個指定的狀態(tài)(即成員變量的初值),但有時系統(tǒng)的缺省初值并不合適;所以在創(chuàng)建一個新對象時,需用構(gòu)造方法完成合法的初始化,使成員變量的初始化工作不依賴于外界(系統(tǒng))完成。 構(gòu)造方法是一種特殊的成員方法,構(gòu)造方法與類同名。 在創(chuàng)建每個新對象時自動執(zhí)行,以保證新對象的各成員都有合法、確定的初值。,39,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,構(gòu)造方法(例),class Dog private int weight ; public Dog() / Dog類的構(gòu)造方法 weight = 42 ; /實現(xiàn)對象狀態(tài)(成員變量)的初始化 public int getWeight() ret
26、urn weight; public void setWeight(int myWeight) weight = myWeight; public class UseDog public static void main(String args) Dog d = new Dog(); /用構(gòu)造方法創(chuàng)建對象 System.out.println(The dogs weight is + d.getWeight(); ,The dogs weight is 42,運算結(jié)果:,40,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,構(gòu)造方法的特點,構(gòu)造方法與成員方法不同,不能被直接調(diào)用,必須通過new調(diào)用; 創(chuàng)建對
27、象時,利用運算符 new 在內(nèi)存中開辟專用空間,存放指定的類的實例(即對象),這時會自動執(zhí)行類的構(gòu)造方法,初始化新對象的成員變量. 例:Date d = new Date (22, 5, 2003);,41,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,構(gòu)造方法的特點(續(xù)),訪問權(quán)限:public(即,所有類都可以創(chuàng)建該類的實例), private,protected,缺省。 構(gòu)造方法沒有返回類型,但聲明時也不加void。 構(gòu)造方法可以完成更多的操作,而不僅僅局限于變量的初始化.(如在構(gòu)造方法中調(diào)用其他方法等。) 一個類可創(chuàng)建多個構(gòu)造方法:構(gòu)造方法的重載。,42,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,構(gòu)造方法
28、的缺省,每一個類至少有一個構(gòu)造方法。 當(dāng)程序員未定義任何構(gòu)造方法時,系統(tǒng)在編譯時,會提供一個缺省構(gòu)造方法:無參數(shù),方法體中沒有內(nèi)容 缺省構(gòu)造方法的初始化數(shù)據(jù)初值: 數(shù)值型:0; 布爾型:false; 引用型:null; 字符串型:null; 一旦程序員定義了構(gòu)造方法,則缺省構(gòu)造方法自動失效!,43,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,構(gòu)造方法的缺?。豪?class Dog /程序員未定義構(gòu)造方法 private int weight ; public int getWeight() return weight; public void setWeight(int myWeight) weight
29、 = myWeight; public class UseDog public static void main(String args) Dog d = new Dog(); /用缺省的構(gòu)造方法創(chuàng)建對象 System.out.println(The dogs weight is + d.getWeight(); ,The dogs weight is 0,運算結(jié)果:,44,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,以“this” 調(diào)用構(gòu)造方法,this(參數(shù)列表) 表示調(diào)用本類的構(gòu)造方法 在一個構(gòu)造方法中,當(dāng)使用this 并給它一個參數(shù)列表時,this顯式調(diào)用參數(shù)匹配的另一個構(gòu)造方法。例4-8 使用
30、this調(diào)用本類的其他構(gòu)造方法時,this應(yīng)是第一個可執(zhí)行語句,45,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,以“this” 調(diào)用構(gòu)造方法,Name: Unknown Salary:0,46,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,Java中對象的生命周期,對象是某一個類的實例,是運行時動態(tài)生成的。 對象的創(chuàng)建、使用、回收,47,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,Java中對象的創(chuàng)建,對象的聲明 Point p1,p2; 對象的實例化 p1 = new Point(); p2 = new Point(); new 返回類對象的一個引用 Point p3 = p2; 對象的聲明和實例化可寫在同一條命令中 P
31、oint p4 = new Point();,p1,48,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,對象初始化三步曲,為對象分配內(nèi)存空間,首先將成員變量初始化: 0 (數(shù)值型,字符型) false (邏輯型) null (引用型) 對象建立后,有明確的狀態(tài),屬性都有值。 執(zhí)行顯式初始化(執(zhí)行類成員的簡單賦值表達式) public class Point int x=2; int y=2; /顯式初始化 public Point(int x, int y); /構(gòu)造方法 執(zhí)行構(gòu)造方法,完成對象初始化,p1=new Point(21, 45),49,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,對象的使用,訪問對象的
32、成員變量 date1.day 調(diào)用對象的方法 date1.setDate() 用方法來保證成員變量訪問的正確性、完整性約束檢查。 注意對象中成員變量和方法的訪問權(quán)限管理。,50,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,對象的回收,垃圾收集機制(garbage collection):Java運行環(huán)境當(dāng)確定某個對象不再被使用時,將其刪除。 一個對象在沒有引用指向它時,可作為垃圾收集。 垃圾收集器:Java運行環(huán)境中的垃圾收集器周期性地釋放不用對象所占用的空間,自動實現(xiàn)內(nèi)存回收。,51,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,C+:A *a=new A( ); A *b=a; A *c=a;,Java :A
33、a=new A( ); A b=a; A c=a;,/a 使用完,顯式刪除對象 delete a;,/a 使用完,顯式刪除其引用 a= null ;,對象清除的比較,只有所有對該對象的引用都刪除后,才能回收此對象。,52,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,子類表示類之間一種“屬于”( is a )關(guān)系。 例:public class Employee String name ; Date hireDate ; Date dateofBirth ; String jobTitle ; int grade ; ,public class Manager String name ; Date hir
34、eDate ; Date dateofBirth ; String jobTitle ; int grade ; String department ; ,類的繼承:子類,53,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,Java中用 extends 關(guān)鍵字定義子類。,public class Employee String name ; Date hireDate ; Date dateofBirth ; String jobTitle ; int grade ; ,子類是從已有的類創(chuàng)建新類的一種方法。,public class Manager extends Employee String depa
35、rtment ; ,類的繼承:Extends 關(guān)鍵字,54,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,類的繼承,創(chuàng)建類時指明它為某類的子類 extends 超類/父類名 父類 來自系統(tǒng)類庫 用戶自定義類 子類將繼承除 private 外所有父類成員,(帶private 修飾符的屬性、方法是不能被繼承的) Java是單繼承的,不支持多重繼承(但可用接口實現(xiàn)) extends后的類名只能有一個。,55,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,類的繼承:擴展,子類對父類可做擴展和特殊化。子類繼承父類的屬性、功能(方法),子類中只需聲明特有的東西。 創(chuàng)建新的成員:變量和方法 department 重新定義 父類中已
36、有的變量 :父類變量被隱藏 重新定義 父類中已有的方法 :重寫 or 覆蓋(override ) 子類中的方法應(yīng)與父類中的被重寫的方法有完全相同的參數(shù)列表、返回值 getDetails(),56,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,子類可以改變從父類繼承的行為。 被重寫方法的返回值、方法名、參數(shù)列表要 與父類中的方法完全一樣。 例:4-11,類的繼承:方法重寫(Overriding),57,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,58,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,必須返回與原來方法完全相同的返回值類型。 方法的訪問權(quán)限不能縮小。 不能拋出新的例外。,類的繼承:方法重寫的規(guī)則,59,上海財經(jīng)大學(xué)
37、信息管理與工程學(xué)院,類的繼承:上溯造型,定義:子類對象可自動轉(zhuǎn)換成父類對象,即,父類變量可以指向子類對象,稱為上溯造型(upcast),系統(tǒng)自動完成。 例: Father 父類 Son 子類 fatherMethod( ) fatherMethod( ) , sonMethod( ) Father f1 = new Father( ); Son s= new son( );,Father f2 = new Son( );,s.fatherMethod( );,f1. sonMethod();,/父類變量可以指向子類對象, 上溯造型,/子類對象可訪問父類方法(繼承或重寫),/錯!父類對象不能自動
38、轉(zhuǎn)化為子類對象,需將父類對象強制轉(zhuǎn)換為子類對象強制(下溯造型): s1(Son) f1; s1.sonMethod();,60,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,Java允許父類對象的變量作為子類對象的變量 使用。父類變量可以指向父類對象,也可以指向子類對象。 如:Employee e = new Manager( ); 但通過該變量(如e)只能訪問父類聲明的方法(無論是繼承的還是重寫的),子類所擴展的方法被隱藏。 運行時,根據(jù)對象的類型來確定使用父類還是子類的方法。 Employee e = new Manager(); /對象強制轉(zhuǎn)換代碼 e.getDetails( ); /子類方法,運行
39、時多態(tài),61,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,上溯造型小結(jié),上溯造型:父類的引用變量可以指向子類對象,系統(tǒng)默許。,上溯造型中,子類對象只能訪問父類中定義的變量和方法,因而可以訪問到父類中被子類隱藏的同名成員。 例: Father f2 = new Son( ); /上溯造型 f2.fatherMethod( );/訪問的是子類方法,父類方法被隱藏,運行時多態(tài):在運行時根據(jù)對象的具體情況來決定調(diào)用的方法是父類的還是子類的。 如f2.fatherMethod( );訪問的方法是父類方法還是子類方法取決于f2當(dāng)時所指向的對象。,下溯造型:需強制轉(zhuǎn)換。,62,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,63,
40、上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,晚聯(lián)編,A a=new A( ); B b=new B( ); A a1=(A) b;,a.aM a.aF b.aM b.aF a1.aM a1.aF,a1.aF:動態(tài)/滯后聯(lián)編,子類B的實例和方法 其他(如a1.aM ):靜態(tài)聯(lián)編.父類A的變量,64,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,晚聯(lián)編(綁定),例4-12 public class Shapes statics void drawOneShape(Shape ss) s.draw(); drawShapes(s);,65,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,由于上溯造型, Java中允許構(gòu)造如下類型的數(shù)組
41、: Employee staff = new Employee3; staff0 = new Manager( ); staff1 = new Worker(); staff2 = new Employee(); - staff 是由多種類型的對象組成的。 父類的引用變量可以指向子類對象,系統(tǒng)默許,構(gòu)造不同類型數(shù)據(jù)的集合,66,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,類的繼承:this , super,引用類的成員變量或方法時的前綴 this: 當(dāng)前類的方法或變量 super: 直接父類的成員(只能上溯一層) 例:Employee父類 Manager子類 this.getDetails():調(diào)用子類
42、的方法 super. getDetails():調(diào)用父類的方法,67,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,Super指向該關(guān)鍵字所在類的父類。 Public class Empolyee private String name ; private int salary; public String getDetails( ) return “Name: ”+name+“nSalary:”+salary; public class Manager extends Empolyee private String department ; public String getDetails( ) /子類
43、重寫方法 return super.getDetailes( )+nDepartment: “+ department; ,super關(guān)鍵字,68,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,instanceof 運算符:測試對象類型,返回布爾值 Empolyee a = new Manager(); 則 a instanceof Manager 為true; 類型轉(zhuǎn)換 父類弱、子類強,指向父類的引用不能直接按子類引用使用, 而必須要強制類型轉(zhuǎn)換后才能作為子類的引用使用。 例:public void method( Employee e) if (e instanceof Manager) Manage
44、r m = (Manager) e ; /父類對象e強制轉(zhuǎn)化為子類對象 m.department = “sales”; ,instanceof 及類型強制轉(zhuǎn)換,69,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,構(gòu)造方法的繼承,子類沒有定義構(gòu)造方法時,自動繼承父類不含參數(shù)的構(gòu)造方法,并在創(chuàng)建新子類對象時自動執(zhí)行 子類有自己的構(gòu)造方法時,創(chuàng)建新子類對象時也要先執(zhí)行父類不含參數(shù)的構(gòu)造方法,再執(zhí)行自己的構(gòu)造方法 子類的構(gòu)造方法定義中,如要調(diào)用父類的含參數(shù)的構(gòu)造方法,需用super關(guān)鍵字,且該調(diào)用語句必須是子類構(gòu)造方法的第一個可執(zhí)行語句。例:4-11,70,上海財經(jīng)大學(xué) 信息管理與工程學(xué)院,構(gòu)造方法的繼承(續(xù))j05,class Bread Bread() class Cheese Cheese() class Lettuce Lettuce() class Meal Meal() class Lunch extends Meal Lunch() class PortableLunch extends Lunch PortableLunch() class Sandwich extends PortableLunch Bread b = new Bread(); Ch
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 多聯(lián)機空調(diào)系統(tǒng)技術(shù)要點
- 不間斷電源系統(tǒng)技術(shù)要點
- 施工技術(shù)考試題庫及答案
- 食品安全培訓(xùn)c類試題及答案
- 砂輪機使用安全培訓(xùn)試題及答案
- 輔警崗位知識培訓(xùn)課件
- 2026 年初中英語《動詞》專項練習(xí)與答案 (100 題)
- 2026年深圳中考語文傳統(tǒng)題型強化試卷(附答案可下載)
- 春晚排序題目及答案
- 2025 小學(xué)二年級科學(xué)下冊了解光的折射現(xiàn)象實例分析報告總結(jié)報告課件
- 2026廣東東莞市謝崗鎮(zhèn)社區(qū)衛(wèi)生服務(wù)中心招聘納入崗位管理編制外人員7人備考題庫及一套答案詳解
- 2025年csco肝癌治療指南
- 2026云南公務(wù)員考試(6146人)易考易錯模擬試題(共500題)試卷后附參考答案
- 海參供貨合同范例
- 工程勘察設(shè)計行業(yè)質(zhì)量管理體系
- 復(fù)方蒲公英注射液對心血管系統(tǒng)作用研究
- 2021-2022學(xué)年浙江省寧波市鎮(zhèn)海區(qū)蛟川書院八年級(上)期末數(shù)學(xué)試卷(附答案詳解)
- (新版)老年人能力評估師理論考試復(fù)習(xí)題庫(含答案)
- 光纖激光打標(biāo)機說明書
- 治理現(xiàn)代化下的高校合同管理
- 境外宗教滲透與云南邊疆民族地區(qū)意識形態(tài)安全研究
評論
0/150
提交評論