面向?qū)ο笈cJava程序設(shè)計(設(shè)計基礎(chǔ)-、類與對象、繼承與多態(tài))課件_第1頁
面向?qū)ο笈cJava程序設(shè)計(設(shè)計基礎(chǔ)-、類與對象、繼承與多態(tài))課件_第2頁
面向?qū)ο笈cJava程序設(shè)計(設(shè)計基礎(chǔ)-、類與對象、繼承與多態(tài))課件_第3頁
面向?qū)ο笈cJava程序設(shè)計(設(shè)計基礎(chǔ)-、類與對象、繼承與多態(tài))課件_第4頁
面向?qū)ο笈cJava程序設(shè)計(設(shè)計基礎(chǔ)-、類與對象、繼承與多態(tài))課件_第5頁
已閱讀5頁,還剩267頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)1第3章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)1面向?qū)ο蟮母拍钏^面向?qū)ο蟮姆椒ǎ褪鞘刮覀兎治?、設(shè)計和實現(xiàn)一個系統(tǒng)的方法盡可能自然地使用我們在生活中用到的以對象為中心的思想,分析、認識、設(shè)計一個系統(tǒng)的方法。包括:面向?qū)ο蟮姆治觯∣OA,Object-OrientedAnalysis)面向?qū)ο蟮脑O(shè)計(OOD,Object-OrientedDesign)面向?qū)ο蟮某绦蛟O(shè)計(OOP,Object-OrientedProgram)面向?qū)ο蠹夹g(shù)主要圍繞以下幾個概念討論:對象的封裝(抽象數(shù)據(jù)類型)、類與對象、繼承性、多態(tài)性。12/22/2022

01:012面向?qū)ο蟮母拍钏^面向?qū)ο蟮姆椒?,就是使我們分析、設(shè)計和實現(xiàn)變量方法面向?qū)ο蟮母拍顚ο?Object)有兩個層次的概念:現(xiàn)實生活中對象指的是客觀世界的實體,它由狀態(tài)(State)和行為(Behavior)構(gòu)成;程序中對象是現(xiàn)實世界對象的模型,是一組變量和相關(guān)方法的集合。變量(Variables)表示現(xiàn)實對象的狀態(tài),方法(Methods)表現(xiàn)現(xiàn)實世界對象的行為,這些變量和方法叫做這個對象的成員(Member)。12/22/2022

01:013變量方法面向?qū)ο蟮母拍顚ο?Object)有兩個層次的概現(xiàn)實生活中的對象ClassCar{intcolor_number;intdoor_number;

intspeed;

voidbrake(){…}

voidspeedUp(){…}voidslowDown(){…}}

抽象數(shù)據(jù)類型面向?qū)ο蟮母拍羁蓪F(xiàn)實生活中的對象經(jīng)過抽象,映射為程序中的對象。對象在程序中通過一種抽象數(shù)據(jù)類型來描述,就稱為類(Class)。12/22/2022

01:014現(xiàn)實生活中的對象ClassCar抽象數(shù)據(jù)類型面向?qū)ο蟮母拍蠲嫦驅(qū)ο蟮母拍?/p>

類(Class)類是描述對象的“基本原型”,它定義一類對象所能擁有的數(shù)據(jù)和能完成的操作。在面向?qū)ο蟮某绦蛟O(shè)計中,類是程序的基本單元。相似的對象可以歸并到同一個類中去,就像傳統(tǒng)語言中的變量與數(shù)據(jù)類型關(guān)系一樣。對象程序中的對象是類的一個實例,是一個軟件單元,它由一組結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)成。12/22/2022

01:015面向?qū)ο蟮母拍铑悾–lass)12/19/202212:……Carcar1;Carcar2;……CarcarN;面向?qū)ο蟮母拍?2/22/2022

01:016……Carcar1;面向?qū)ο蟮母拍?2/19/2022對象B對象A消息面向?qū)ο蟮母拍铑惖淖兞?ClassVariables):指對象的所具有的狀態(tài)或特征。類的方法(ClassMethods):指對象的功能單元。消息(Message):軟件對象通過相互間傳遞消息來相互作用和通信,一個消息由三部分組成:1.發(fā)送消息的對象2.接收發(fā)送消息(調(diào)用發(fā)送對象的方法)3.方法需要的參數(shù)12/22/2022

01:017對象B對象A消息面向?qū)ο蟮母拍铑惖淖兞?ClassVar一個例子在程序中操作對象是類的一個實例。創(chuàng)建一個對象:Helloobj=newHello();調(diào)用方法:obj.showString();classHello{

}privateStrings;publicvoidshowString(){System.out.println(s);}publicvoidchangeString(Stringstr){s=str; }變量方法showString()方法changeString()面向?qū)ο蟮母拍?2/22/2022

01:018一個例子classHelloprivateString面向?qū)ο蟮母拍?/p>

為什么使用類采用簡單數(shù)據(jù)類型表示現(xiàn)實世界中概念存在一些局限性。例如:采用int型數(shù)據(jù)表示一個日期概念,需要使用3個變量: int day,month,year;如果要表示2個人的生日,就要使用6個變量:intmybirthday,mybirthmonth,mybirthyear;intyourbirthday,yourbirthmonth,yourbirthyear;12/22/2022

01:019面向?qū)ο蟮母拍顬槭裁词褂妙?2/19/202212:15classBirthDate{privateintday,month,year;publicinttomorrow(){……}}BirthDatemybirth,yourbirth;面向?qū)ο蟮母拍顚⒆兞亢头椒ǚ庋b在一個類中,可以對成員變量進行隱藏,外部對類成員的訪問都通過方法進行,能夠保護類成員不被非法修改。BirthDatedate;已知當(dāng)前日期對象,求第2天的日期對象:

date.day=date.day+1;如果date.day已經(jīng)為31,操作結(jié)果是非法狀態(tài)??梢远x一個成員方法tomorrow(),求第2天的日期對象。外部要獲得當(dāng)前日期的后一天時,只要調(diào)用:date.tomorrow();12/22/2022

01:0110classBirthDate{面向?qū)ο蟮母拍顚⒆兞亢头椒▽ο驛對象B私有數(shù)據(jù)方法方法數(shù)據(jù)公有數(shù)據(jù)面向?qū)ο蟮母拍罘庋b(Encapsulation)封裝把對象的所有組成部分組合在一起。封裝定義程序如何引用對象的數(shù)據(jù),實際上是用方法將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度。封裝利于模塊化和信息隱藏。

12/22/2022

01:0111對象A對象B私有數(shù)據(jù)數(shù)據(jù)公有數(shù)據(jù)面向?qū)ο蟮母拍罘庋b(Encabicycle(Superclass)MountainbikesRacingbikesTandembikesSubclass1、面向?qū)ο蟮母拍钭宇?Subclass)子類是作為另一個類的擴充或修正而定義的一個類。12/22/2022

01:0112bicycle(Superclass)MountainbclassCar{intcolor_number;intdoor_number;intspeed;publicvoidpush_break(){…}publicvoidadd_oil(){…}}

classTrash_CarextendsCar{doubleamount;publicvoidfill_trash(){…}}

面向?qū)ο蟮母拍罾^承(Inheritance)一個類從另一個類派生出來的過程叫繼承。這個類叫子類(派生類),而被繼承的類叫該類的超類(父類)繼承的子類可利用父類中定義的方法和變量,就像它們屬于子類本身一樣。也可以改變繼承來的方法和變量。12/22/2022

01:0113classCarclassTrash_CarextclassCar{intcolor_number;intdoor_number;intspeed;publicvoidpush_break(){speed=0;}publicvoidadd_oil(){…}}

classTrash_CarextendsCar{doubleamount;publicvoidfill_trash(){…}publicvoidpush_break(){speed=speed–10;}}面向?qū)ο蟮母拍罘椒ǖ母采w(override)在子類中重新定義父類中已有的方法。12/22/2022

01:0114classCarclassTrash_Carext類voidshow(intint_num)voidshow(doubledouble_num)voidshow(intint_num,floatfloat_num)1231.23123,1.23面向?qū)ο蟮母拍罘椒ǖ闹剌d(Overload)在同一個類中至少有兩個方法用同一個名字,但有不同的參數(shù)列表。使用重載方法時,Java編譯器根據(jù)傳遞給這個參數(shù)的數(shù)目和類型確定正確的方法。重載實現(xiàn)了對象的多態(tài)特性。多態(tài)性的特點大大提高了程序的抽象程度和簡潔性。12/22/2022

01:0115類voidshow(intint_num)void本課程的目標(biāo)——ThinkinginJava通過Java語言來介紹面向?qū)ο蟪绦蛟O(shè)計,培養(yǎng)面向?qū)ο蟮乃季S,掌握其方法、原理與機制,具備一定的面向?qū)ο笤O(shè)計、開發(fā)能力。為后續(xù)課程及大型軟件的設(shè)計與工程實現(xiàn)打下基礎(chǔ)。12/22/2022

01:0116本課程的目標(biāo)——ThinkinginJava通過Java 第4章類與對象17 第4章類與對象17全面掌握面向?qū)ο蟮幕咎卣髡莆杖绾味x一個類以及如何生成對象深入掌握方法的定義及技巧深入掌握類的訪問權(quán)限與封裝機制深入掌握包的定義與包的使用方法

本章學(xué)習(xí)要點12/22/2022

01:0118本章學(xué)習(xí)要點12/19/202212:1518Java是一種純粹的面向?qū)ο蟮某绦蛟O(shè)計語言,一個Java程序乃至Java程序內(nèi)的基本單元都是對象。因此,用Java進行程序設(shè)計必須將自己的思想轉(zhuǎn)入到一個面向?qū)ο蟮氖澜?,以對象世界的思維方式來思考問題。編寫一個Java程序就是在定義類和創(chuàng)建對象,也就是說定義類和建立對象是Java編程的主要任務(wù)。本章和下一章將介紹Java面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ),即對象、類、子類、超類、接口、包以及類的繼承等內(nèi)容。12/22/2022

01:0119Java是一種純粹的面向?qū)ο蟮某绦蛟O(shè)計語言,一個Java程序4.1類的建立Java的類分為兩大部分:系統(tǒng)定義的類和用戶自定義類。學(xué)習(xí)Java語言在某種程度上就是在:學(xué)習(xí)如何定義所需要的類,即學(xué)習(xí)Java程序的書寫規(guī)范,熟悉和掌握語法規(guī)則;熟悉Java平臺定義了哪些經(jīng)常要用到、而且滿足我們需要的類。Java的類庫就是系統(tǒng)定義的類,它是系統(tǒng)提供的已實現(xiàn)的標(biāo)準(zhǔn)類的集合,提供了Java程序與運行它的系統(tǒng)軟件(Java虛擬機)之間的接口。12/22/2022

01:01204.1類的建立Java的類分為兩大部分:系統(tǒng)定義4.1.1類的概念與定義用面向?qū)ο蟮挠^點來看,世界上的一切事物都是對象。而物以“類”聚,所以這些對象可以劃分成各種“類”。按照面向?qū)ο蟮挠^點,一個類分為狀態(tài)和行為兩部分,再加上類名這一部分,可以把一個類的定義分為3個部分:IS,HAS,DOES。其具體含義是:·IS說明該類“是”什么樣的一個類,即說明類的名字及其性質(zhì),如一個類的父類、修飾符等,這一部分稱為類聲明?!AS說明這個類“有”些什么特征及屬性,這些特征和屬性用域變量來表示,這一部分統(tǒng)稱為成員變量?!OES說明這個類可以“做”什么,即這個類有哪些行為,這些行為用實例方法和類方法描述,這些方法統(tǒng)稱為成員方法。12/22/2022

01:01214.1.1類的概念與定義用面向?qū)ο蟮挠^點來4.1.1類的概念與定義IS和HAS部分構(gòu)成了一個類的狀態(tài),DOES就是一個類的行為,行為通過成員方法(MemberMethod)來實現(xiàn)。這樣,定義一個類的基本形式為:class類名 //IS{成員變量; //HAS成員方法; //DOES}在Java中,class是聲明一個類的關(guān)鍵字,類名是要聲明的類的名字,它必須是一個合法的Java標(biāo)識符,習(xí)慣上用大寫字母開頭。12/22/2022

01:01224.1.1類的概念與定義IS和HAS部分構(gòu)成了一個類的狀12/22/2022

01:012312/19/202212:15234.1.2類聲明類聲明定義了類的名字以及其他的屬性,說明該類是(IS)什么樣的一個類。一般來說,根據(jù)聲明的類的需要,類聲明可以包含如下3個選項:·聲明類的修飾符·說明該類的父類·說明該類所實現(xiàn)的接口[類修飾符]class類名稱[extends父類名稱][implements接口名稱列表]{變量定義及初始化;方法定義及方法體;}類體,其中定義了該類中所有的變量和該類所支持的方法,分別稱為成員變量和成員方法。12/22/2022

01:01244.1.2類聲明類聲明定義了類的名字以及其他的屬性,說明類修飾符是下列之一:

[public|

abstract|final]public該關(guān)鍵字聲明的類可以在其他的任何類中使用。默認時,該類只能被同一個程序包中其他的類使用。abstract—抽象類,沒有具體對象的概念類,沒有具體實現(xiàn)功能,只用于擴展子類。例如:“鳥”,它可以派生出“鴿子”、“燕子”等具體類。final—最終類,表示該類已經(jīng)非常具體,沒有子類可擴展。1.類修飾符12/22/2022

01:0125類修飾符是下列之一:1.類修飾符12/19/20221在Java中,除Object之外,每個類都有一個父類。Object是Java語言中惟一沒有父類的類,如果某個類沒有聲明父類,Java就認為它是Object的直接子類。因此,所有其他類都是Object的直接子類或間接子類。說明一個類的父類的形式為:class類名extends父類名{……//類體}其中extends子句認為是直接繼承其后的父類,因此在類的分級結(jié)構(gòu)中插入這個類。2.說明一個類的父類12/22/2022

01:0126在Java中,除Object之外,每個類都有一個父類。Obj接口定義了行為的協(xié)議,這些行為可以在處于各個層次的任何類中被實現(xiàn)。一個類要實現(xiàn)的一個或多個接口,可以使用關(guān)鍵字implements,并且在其后面給出由該類實現(xiàn)的接口的名字表,接口的名字表是以逗號分隔的多個接口,其形式為:

implementsInterfaces1,Interfaces2,…,Interfacesk;接口可以聲明多個方法和變量,但是沒有這些方法的具體實現(xiàn)。4.說明一個類所實現(xiàn)的接口12/22/2022

01:0127接口定義了行為的協(xié)議,這些行為可以在處于各個層次的任何類中被[變量修飾符]變量數(shù)據(jù)類型

變量名1,變量名2[=變量初值]…;變量修飾符:[public|protected|private|package][static][final]public、protected、private為可訪問性修飾符static—說明該成員變量是類變量final—說明為常量使用成員變量的類型可以是Java中任意的數(shù)據(jù)類型,包括簡單類型,類,接口,數(shù)組。在一個類中的成員變量應(yīng)該是唯一的。4.1.3成員變量的聲明類成員變量的定義及修飾符12/22/2022

01:0128[變量修飾符]變量數(shù)據(jù)類型變量名1,變量名2[=變量初值訪問控制符

public: 任何其它類、對象只要可以看到這個類的話,那么它就可以存取變量的數(shù)據(jù),或使用方法。Dinner.javaprotected:同一類,同一包可以使用。不同包的類要使用,必須是該類的子類。ChocolateChip.javaprivate: 不允許任何其他類存取和調(diào)用。

IceCream.javadefault: (前邊沒有修飾字的情況)在同一包中出現(xiàn)的類才可以直接使用它的數(shù)據(jù)和方法.Cake.java12/22/2022

01:0129訪問控制符public: 任何其它類、對象只要可以看到這訪問控制符對公共類的成員變量和成員方法而言,可通過施以一定的訪問權(quán)限來限定其成員的應(yīng)用范圍,具體范圍如下:同一個類中同一個包中不同包中的子類不同包中的非子類private★default★★protected★★★public★★★★12/22/2022

01:0130訪問控制符對公共類的成員變量和成員方法而言,可通過施以一訪問控制符公共類和非公共類的屬性和方法的訪問控制表及圖示見下圖:12/22/2022

01:0131訪問控制符公共類和非公共類的屬性和方法的訪問控制表及圖示見下classABCD{chardata;

staticintshare_data;}classDemo{ABCDa,b,c,d;}objectachardataobjectcchardataObjectbchardatastaticintshare_dataobjectdchardata類變量屬于類的變量和方法——staticstatic在變量或方法之前,表明它們是屬于類的,稱為類方法(靜態(tài)方法)或類變量(靜態(tài)變量)。若無static修飾,則是實例方法和實例變量。類變量在各實例間共享同心圓12/22/2022

01:0132classABCDobjectaobjectcObjepublicclassStaticVar{ publicstaticintnumber=5;}publicclassOtherClass{ publicvoidmethod() { intx=StaticVar.number; }}類變量的生存期不依賴于對象的實例,其它類可以不通過對象實例訪問它們。甚至可以在它的類的任何對象創(chuàng)建之前訪問。例ch3\Compare_test.java類變量12/22/2022

01:0133publicclassStaticVar類變量的生存期不

方法是類的動態(tài)屬性。對象的行為是由它的方法來實現(xiàn)的。一個對象可通過調(diào)用另一個對象的方法來訪問該對象。與類一樣,方法也有兩個主要部分:方法首部聲明和方法體。方法聲明的基本形式為:返回類型方法名(){……//方法體}4.1.4方法的聲明與實現(xiàn)12/22/2022

01:0134方法是類的動態(tài)屬性。對象的行為是由它的方法來實現(xiàn)的。[方法修飾符]返回類型方法名稱(參數(shù)1,參數(shù)2,…)[throwsexceptionList]{…statements; //方法體:方法的內(nèi)容}方法修飾符[public|protected|private][static][final|abstract][native][synchronized]返回類型可以是任意的Java數(shù)據(jù)類型,當(dāng)一個方法不需要返回值時,返回類型為void。參數(shù)的類型可以是簡單數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型(數(shù)組、類或接口),參數(shù)傳遞方式是值傳遞。方法體是對方法的實現(xiàn)。它包括局部變量的聲明以及所有合法的Java指令。局部變量的作用域只在該方法內(nèi)部。方法聲明方法聲明的完整形式:12/22/2022

01:0135[方法修飾符]返回類型方法名稱(參數(shù)1,參數(shù)2,…)方法的返回類型一個方法必須聲明其返回類型,如果無返回值,則必須聲明其返回類型為void。當(dāng)return語句帶有返回值時,它與方法定義的返回類型的關(guān)系必須符合如下幾種情況之一:·當(dāng)方法聲明的返回類型是基本數(shù)據(jù)類型時,返回值的數(shù)據(jù)類型必須與返回類型一致?!ぎ?dāng)方法聲明的返回類型是一個類時,返回對象的數(shù)據(jù)類型必須是與方法聲明的返回類相同的類或其子類。·當(dāng)方法聲明的返回類型是一個接口類型時,返回的對象所屬的類必須實現(xiàn)這個接口。Length12/22/2022

01:0136方法的返回類型一個方法必須聲明其返回類型,如果無返回值,則必方法名方法名可以是任何合法的Java標(biāo)識符。(1)方法可以重載Java支持方法名重載,即多個方法可以共享一個名字。(2)重載的方法不一定返回相同的數(shù)據(jù)類型,但參數(shù)必須有所區(qū)別:·參數(shù)的類型不同。例如,doubleIt(intx)和doubleIt(Stringx)方法的兩個版本的參數(shù)的類型不一樣?!?shù)的順序不同。這里是指一個方法有多個不同類型參數(shù)的情況,改變參數(shù)的順序也算是一種區(qū)分方法?!?shù)的個數(shù)不同。Overload.java12/22/2022

01:0137方法名方法名可以是任何合法的Java標(biāo)識符。12/19/2方法的參數(shù)一個參數(shù)是一個方法的變元,它與類的成員變量毫無關(guān)系,因此參數(shù)名可以和成員變量名相同。如果一個方法的參數(shù)名與成員變量名同名,則在這個方法中,參數(shù)隱藏了這個成員變量名,也就是說,在方法中出現(xiàn)的這個名字指的是參數(shù)名,而不是成員變量名。ClassCircle{intx,y,radius;publicCircle(intx,inty,intradius){this.x=x;this.y=y;this.radius=radius;}}12/22/2022

01:0138方法的參數(shù)一個參數(shù)是一個方法的變元,它與類的成員變量毫無關(guān)方法的參數(shù)傳遞Java的參數(shù)傳遞方式是傳遞值,也稱為“值傳遞”。參數(shù)有兩種類型:基本類型的變量名是變量本身;引用類型變量的名字是變量的存儲地點。12/22/2022

01:0139方法的參數(shù)傳遞Java的參數(shù)傳遞方式是傳遞值,也稱為“值傳方法的參數(shù)傳遞對于這種值傳遞方式要區(qū)分如下兩種情況:(1)當(dāng)參數(shù)變元是一個簡單類型時,值傳遞意味著這個方法不能改變參數(shù)變元的值。(2)當(dāng)參數(shù)變元是一個引用類型時,值傳遞意味著這個方法不能改動這個對象的引用,但是方法可以調(diào)用該對象的方法來修改該對象中可訪問的變量。不能改變基本類型變量的值可以改變StringTester.java12/22/2022

01:0140方法的參數(shù)傳遞對于這種值傳遞方式要區(qū)分如下兩種情況:不能改方法體(1)null變量null是一個“空”變量,用于指代某一個對象,但這個對象沒有相應(yīng)的實例。例如:Stackstack=null;NullTest.java(2)this變量this表示的是當(dāng)前類的當(dāng)前對象本身,更準(zhǔn)確地說,this代表了當(dāng)前對象的一個引用。(3)super變量super表示的是當(dāng)前對象的直接父類對象的引用。所謂直接父類是相對于當(dāng)前對象的其他“祖先”類而言的,(4)局部變量在方法體中,可以聲明多個變量,它們在該方法內(nèi)部使用。12/22/2022

01:0141方法體(1)null變量12/19/202212:1541變量的作用域X.java12/22/2022

01:0142變量的作用域X.java12/19/202212:1542類方法類方法獨立于該類的任何對象,其他類不用實例化即可調(diào)用它們。類方法可以調(diào)用其它的類方法類方法只能訪問static變量類方法不能以任何形式引用this和superpublicclassGeneralFunction{ publicstaticintaddUp(intx,inty){returnx+y;}}publicclassUseGeneral{ publicvoidmethod(){ inta=9; intb=10; intc=GeneralFunction.addUp(a,b);

//通過類名GeneralFunction引用addUp方法 }}12/22/2022

01:0143類方法類方法獨立于該類的任何對象,其他類不用實例化即可調(diào)用它

不正確的引用:StaticErrorclassStaticError{Stringmystring=“hello”;publicstaticvoidmain(Stringargs[]){System.out.println(mystring);}}編譯時錯誤信息:nonstaticvariablemystringcannotbereferencedfromastaticcontext為什么不正確:只有對象的方法可以訪問對象的變量。正確的引用同一個類中的方法可以訪問該類的成員變量;一個類的方法只能訪問自己的局部變量。12/22/2022

01:0144不正確的引用:Sta正確的引用解決的辦法1.將變量改成類變量classStaticError{

staticStringmystring=“hello”;publicstaticvoidmain(Stringargs[]){System.out.println(mystring);}}12/22/2022

01:0145正確的引用解決的辦法12/19/202212:1545正確的引用2.先創(chuàng)建一個類的實例,再通過該對象訪問該變量。classNoStaticError{Stringmystring=“hello”;publicstaticvoidmain(Stringargs[]){NoStaticErrornoError;noError=newNoStaticError();System.out.println(noError.mystring);}}12/22/2022

01:0146正確的引用2.先創(chuàng)建一個類的實例,再通過該對象訪問該變量。classCar{intcar_number;voidset_number(intcar_num){car_number=car_num;}voidshow_number(){System.out.println("MycarNo.is:"+car_number);}}classCarDemo{publicstaticvoidmain(Stringargs[]){CarDemocar=newCar();DemoCar.set_number(6868);DemoCar.show_number();}}MycarNo.is:68684.2創(chuàng)建對象與定義構(gòu)造方法一個簡單的類12/22/2022

01:0147classCarclassCarDemoMycarN4.2.1創(chuàng)建對象1.對象聲明像聲明基本類型的變量一樣,對象聲明的一般形式為:

類名對象名;2.為對象分配內(nèi)存及初始化分配內(nèi)存及初始化形式如下:

對象名=new構(gòu)造方法名([參數(shù)表]);創(chuàng)建對象首先需說明新建對象所屬的類,由與類同名的構(gòu)造方法給出;然后要說明新建對象的名字,即賦值號左邊的對象名;賦值號右邊的new是為新建對象開辟內(nèi)存空間的運算符,用new運算符開辟新建對象的內(nèi)存之后,系統(tǒng)自動調(diào)用構(gòu)造方法初始化該對象。若類中沒有定義構(gòu)造方法,系統(tǒng)會調(diào)用默認的構(gòu)造方法。12/22/2022

01:01484.2.1創(chuàng)建對象1.對象聲明12/19/20224.2.1創(chuàng)建對象3.對象的使用對象的使用是通過一個引用類型的變量來實現(xiàn),包括引用對象的成員變量和方法,通過運算符“·”可以實現(xiàn)對變量的訪問和方法的調(diào)用。使用對象的基本形式如下:<對象>.<域變量名><對象>.<方法名>例如: BirthDatedate; intday; day=date.day; //引用date的成員變量day date.tomorrow(); //調(diào)用date的方法tomorrow()例4.912/22/2022

01:01494.2.1創(chuàng)建對象3.對象的使用12/19/20224.2.2定義和使用構(gòu)造方法構(gòu)造方法是類的一種特殊方法,它的特殊性主要體現(xiàn)在如下幾個方面:·構(gòu)造方法的方法名與類名相同?!?gòu)造方法沒有返回類型?!?gòu)造方法的主要作用是完成對象的初始化工作?!?gòu)造方法不能像一般方法那樣用“對象.”顯式地直接調(diào)用,應(yīng)該用new關(guān)鍵字調(diào)用構(gòu)造方法為新對象初始化。定義了構(gòu)造方法之后,就可以用如下的語句創(chuàng)建并初始化Student類的對象:Studentcard1=newStudent(張三,男,2004034567);Studentcard2=newStudent(李四,女,2003034666);12/22/2022

01:01504.2.2定義和使用構(gòu)造方法構(gòu)造方法是類的一種特殊方法,publicclassEmployee{privateStringname;privateintsalary;publicEmployee(Stringn,ints){ name=n; salary=s;}publicEmployee(Stringn){ this(n,0);}publicEmployee(){

name=“Unknown”;}}4.2.2定義和使用構(gòu)造方法如果有一個類帶有幾個構(gòu)造函數(shù),如果想復(fù)制其中一個構(gòu)造函數(shù)的某方面效果到另一個構(gòu)造函數(shù)中??梢酝ㄟ^使用關(guān)鍵字this作為一個方法調(diào)用來達到這個目的12/22/2022

01:0151publicclassEmployee{4.2.2classThisClass{publicvoidanotherMethod(){Bankbank=newBank();bank.someMethod(this);}}classCircle{intr;Circle(intr){

this.r=r;}publicarea(){returnr*r*3.14;}}4.2.2定義和使用構(gòu)造方法thisthis指對象自身,它的一個主要作用是要將自己這個對象當(dāng)作參數(shù),傳送給別的對象中的方法。12/22/2022

01:0152classThisClassclassCircle4.2publicclassappleextendsfruits{publicapple(intprice){super(price);super.var=value;super.method(paraList);}}該程序表示使用父類的構(gòu)造方法生成實例,super必須是子類構(gòu)造方法的第一條語句。4.2.2定義和使用構(gòu)造方法supersuper指一個對象的直接父類。super可以用來引用父類中的(被覆蓋的)方法、(被隱藏的)變量及構(gòu)造方法。12/22/2022

01:0153publicclassappleextendsfr4.3修飾符在定義類時,類名前面可以冠以修飾符。修飾符分為:訪問控制符和非訪問控制符。修飾符修飾的對象分為兩個層次:一個是在類這個層次;一個是在類的內(nèi)部修飾成員變量和成員方法這個層次。4.3.1類的修飾符abstract 類不能直接產(chǎn)生屬于這個類的對象;final 類不能被其他任何類所繼承(安全的考慮);public類不但可以被同一或不同程序包中的其它類使用;default (缺省)類只能被本包中的其它類使用。12/22/2022

01:01544.3修飾符在定義類時,類名前面可以冠以修飾符。修飾符分為4.3.2域修飾符域即成員變量,表示類和對象的特征屬性。域修飾符分為訪問控制符和非訪問控制符。訪問控制符有:public、protected、private非訪問控制符有:·static(靜態(tài)域):屬于類的公共域,為該類所有對象所共享。它可看作是在類范圍內(nèi)的一種全局變量。靜態(tài)域可由靜態(tài)方法和實例方法所使用。·final(最終域):該域為常量。用final修飾符說明常量時,需要說明常量的數(shù)據(jù)類型,并同時指出常量的具體值。通常說明為static,以便類的所有對象共享。例如:staticfinalStringarea_code=“027”;12/22/2022

01:01554.3.2域修飾符域即成員變量,表示類和對象的特征屬性。4.3.3方法修飾符1.抽象方法

abstract修飾的抽象方法是一種僅含有方法聲明部分,而沒有方法體和具體的操作實現(xiàn)部分的方法。2.靜態(tài)方法(類方法)用static修飾符修飾的方法,是屬于整個類的類方法,簡稱為類方法。3.最終方法

由final修飾符所修飾的類方法是最終方法。最終方法是不能被當(dāng)前類的子類重新定義的方法。4.本地方法

native修飾符一般用來聲明用其他語言書寫方法體的特殊方法,所有的native方法都沒有方法體。5.同步方法

synchronized修飾符主要用于多線程共存的程序中的協(xié)調(diào)和同步,保證這個synchronized方法不會被兩個線程同時執(zhí)行。12/22/2022

01:01564.3.3方法修飾符1.抽象方法abstrac4.4類的進一步說明4.4.1嵌套類InnerClassDemo12/22/2022

01:01574.4類的進一步說明4.4.1嵌套類InnerClass4.4.2final的使用到此為止,final有三種使用方法final在類之前,表示該類不能被繼承。final在方法之前,防止該方法被覆蓋。final在變量之前,定義一個常量。12/22/2022

01:01584.4.2final的使用到此為止,final有三種使用4.4.3

abstract的使用抽象類與抽象方法用abstract關(guān)鍵字來修飾一個類時,該類叫做抽象類;用abstract來修飾一個方法時,該方法叫做抽象方法。抽象類不能被直接實例化。因此它一般作為其它類的超類,與final類正好相反。抽象類定義被所有子類共用的抽象方法,而實現(xiàn)細節(jié)由子類完成。抽象類必須被繼承,抽象方法必須被重寫以實現(xiàn)具體意義。抽象方法只需聲明,而不需實現(xiàn)。定義了抽象方法的類必須是抽象類。abstractreturnTypeabstractMethod([paramlist]);12/22/2022

01:01594.4.3abstract的使用抽象類與抽象方法12/14.4.4對象的撤銷與清理finalize在對象進行垃圾收集前,Java運行環(huán)境會自動調(diào)用對象的finalize()方法來釋放系統(tǒng)資源。該方法必須按如下方式聲明:protectedvoidfinalize()throwsthrowable{……}finalize()方法是在java.lang.Object中實現(xiàn)的,在用戶自定義的類中,它可以被覆蓋,但一般在最后要調(diào)用父類的finalize()方法來清除對象所使用的所有資源。protectedvoidfinalize()throwsthrowable{……//釋放本類中使用的資源

super.finalize();}12/22/2022

01:01604.4.4對象的撤銷與清理finalize12/19/204.5程序包程序包(package)由于Java編譯器為每個類生成一個字節(jié)碼文件,且文件名與類名相同,因此同名的類有可能發(fā)生沖突。為了解決這一問題,Java提供包來管理類名空間。如同目錄是文件的松散的集合一樣,包是類和接口的一種松散集合。一般并不要求處于同一個包中的類或者接口之間有明確的聯(lián)系,如包含、繼承等關(guān)系,但是由于同一包中的類在默認情況下可以互相訪問,所以為了方便編程和管理,通常需要把相關(guān)的或在一起協(xié)同工作的類和接口放在一個包里。12/22/2022

01:01614.5程序包程序包(package)12/19/4.5.1包的創(chuàng)建打包Java中用package語句來將一個Java源文件中的類打成一個包。package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定為無名包)。它的格式為:packagepkg1[.pkg2[.pkg3…]];Java編譯器把包對應(yīng)于文件系統(tǒng)的目錄管理,package語句中,用.來指明目錄的層次。12/22/2022

01:01624.5.1包的創(chuàng)建打包12/19/202212:15//Square.javapackagemyclass.graphics;classSquare{…;}classCircle{…;}classTriangle{…;}4.5.1包的創(chuàng)建packagemyclass.graphics;這條語句指定這個包中的類生成的類文件存儲在目錄myclass/graphics下。包層次的根目錄要在編譯該程序時用-d來確定的。javac–dpathSquare.javamyclasspathSquaregraphics12/22/2022

01:0163//Square.java4.5.1包的創(chuàng)建packag4.5.2包的使用我們可以編寫自己的類,也可以使用由系統(tǒng)提供的類庫。下面列出了一些常用的Java包:·java.lang包 基本語言類,程序運行時自動引入·java.io包 所有的輸入輸出類·java.util包 實用的數(shù)據(jù)類型類·java.awt包 構(gòu)建圖形用戶界面(GUI)的類·java.awt.image包處理和操縱網(wǎng)上圖片的工具類·java.awt.peer包 實現(xiàn)與平臺無關(guān)的GUI的類·java.applet包 實現(xiàn)JavaApplet的工具類·包 實現(xiàn)網(wǎng)絡(luò)功能的類12/22/2022

01:01644.5.2包的使用我們可以編寫自己的類,也可以使用由系4.5.2包的使用1java.lang本類包中包含了各種定義java語言時必須的類,這些類能夠以其他類不能使用的方式訪問java的內(nèi)部。其中的類包括:Object類:java中最原始、最重要的類,每個java類都是它的子類,它實現(xiàn)了每個類都必須具有的基本方法?;绢愋桶b器:Boolean,Character,Number,Double,Float,Integer,Long。String類:字符串類。Math類:數(shù)學(xué)函數(shù)的集合。執(zhí)行線程:類Thread,ThreadGroup,接口Runable。異常和錯誤:類Exception,Error,接口Throwable。12/22/2022

01:01654.5.2包的使用1java.lang12/19/204.5.2包的使用1java.lang(續(xù))運行環(huán)境類:可以通過類Runtime和System訪問外部系統(tǒng)環(huán)境。System類的兩個常用功能就是訪問標(biāo)準(zhǔn)輸入/輸出流和錯誤流、退出程序。2java.appletJavaApplet是Java編程的魅力之一,java.applet類包提供了Applet的運行機制以及一些編寫Applet非常有用的方法。3java.awtjava.awt類包是各種窗口環(huán)境的統(tǒng)一界面,其中的類使得創(chuàng)建諸如窗口、菜單、滾動條、文本區(qū)、按鈕以及復(fù)選框等圖形用戶界面(GUI)的元素變得非常容易。12/22/2022

01:01664.5.2包的使用1java.lang(續(xù))12/194.5.2包的使用4java.awt.imagejava.awt.image類包能夠以獨立于設(shè)備的方式加載并過濾位圖圖象。5java.awt.peerjava.awt.peer是全部awt組件的對等對象接口的集合,每個接口都提供了機器相關(guān)基本的方法,awt使用這些方法來實現(xiàn)GUI,而不必關(guān)心是何種機器或操作系統(tǒng)。6java.utiljava.util類包包含了一些實用類和有用的數(shù)據(jù)結(jié)構(gòu),如字典(Dictionary)、散列表(Hashtable)、堆棧(Stack)、向量(Vectro)以及枚舉類(Enumeration)等。12/22/2022

01:01674.5.2包的使用4java.awt.image12/4.5.2包的使用7.java.ioJava的輸入/輸出模式是完全建立在流的基礎(chǔ)之上的。流是一種字節(jié)從一個地方到另一個地方的單向流動,可以把流附加于文件、管道和通信鏈路等。java.io類包中定義的許多種流類通過繼承的方式進行組織,其中也包括一些用來訪問本地文件系統(tǒng)上的文件的流類。8.類包用來完成與網(wǎng)絡(luò)相關(guān)的功能:URL、WWW連接以及更為通用的Socket網(wǎng)絡(luò)通信。12/22/2022

01:01684.5.2包的使用7.java.io12/19/202myclassclasspathSquare包的位置由環(huán)境變量CLASSPATH確定4.5.2包的使用為了能使用Java中已提供的類,我們需要用import語句來引入所需要的類。importpackage1[.package2…].(classname|*);例如:importmyclass.graphics.*;importjava.io.*;12/22/2022

01:0169myclassclasspathSquare包的位置由環(huán)境變4.5.2包的使用使用包中的類可以通過以下3種方法之一進行:1.裝載整個包利用import語句載入整個包。例如:importgraphicPackage.*;該語句必須位于源程序中的任何類和接口定義之前。2.裝載一個類或接口有時只需要某個包中的一個類或接口,無需裝載整個包。如:importgraphicPackage.Circle;3.直接使用包名作類名的前綴如果沒有使用import語句裝載某個包,可以直接在所需要的類名前加上包名作為前綴。例如:graplicPackage.RectanglerectG;12/22/2022

01:01704.5.2包的使用使用包中的類可以通過以下3種方法之一4.5.3編譯和生成包編譯和生成包如果在程序Test.java中已定義了包p1,編譯時采用如下方式:javac-ddestpathTest.java則編譯器會自動在destpath目錄下建立一個子目錄p1,并將生成的.class文件都放到destpath/p1下。執(zhí)行編譯好的Java時可輸入命令:

java–cpdestpath包名.類名在Windows下執(zhí)行該類時可輸入命令:

java–cpdestpath包名/類名One.java

12/22/2022

01:01714.5.3編譯和生成包編譯和生成包12/19/20224.6小結(jié)對于一個類,我們可以通過IS(“是”什么)、HAS(“有”什么)和DOES(“做”什么)三個方面來定義。這三個方面分別指出了類的名字及性質(zhì)、類的成員變量和成員方法。我們在“雕琢”一個類時,還必須指出誰有權(quán)使用這個類就是一個方面。僅有權(quán)使用這個類還不夠,還要說明是否有權(quán)使用它的成員變量和成員方法。所以我們要在兩個層次,即在類的層次和成員變量、成員方法的層次上定義它們的修飾符,指出其性質(zhì)和訪問權(quán)限。12/22/2022

01:01724.6小結(jié)對于一個類,我們可以通過IS(“是”4.6小結(jié)學(xué)習(xí)Java語言在某種程度上就是在學(xué)習(xí)如何定義所需要的類以及學(xué)會使用Java平臺定義的類。Java平臺定義的這些類都分布在各個程序包中。Java的程序包實現(xiàn)了對類的包裝。包的概念與操作系統(tǒng)中目錄的概念很接近,其實,在談到包時,我們不妨用目錄去想象它。12/22/2022

01:01734.6小結(jié)學(xué)習(xí)Java語言在某種程度上就是在學(xué)習(xí)如何定義所練習(xí)1.Java程序使用的類分為哪兩大類?什么是類庫?2.如何定義方法?在面向?qū)ο蟪绦蛟O(shè)計中方法有什么作用?3.如何定義靜態(tài)域?靜態(tài)域有什么特點?4.什么是靜態(tài)初始化器?它有什么特點?與構(gòu)造方法有什么不同?5.為什么要定義靜態(tài)方法?靜態(tài)方法有何特點?靜態(tài)方法處理的域有什么要求?6.什么是抽象方法?如何定義抽象方法、使用抽象方法?7.什么是訪問控制符?有哪些訪問控制符?哪些可以用來修飾類?哪些用來修飾域和方法?8.定義一個計算矩形面積、立方體和球體體積的類。該類完成計算的方法用靜態(tài)方法實現(xiàn)。9.使用靜態(tài)成員變量來計算內(nèi)存中的實例化的對象數(shù)目。12/22/2022

01:0174練習(xí)1.Java程序使用的類分為哪兩大類?什么是類庫?12結(jié)束12/22/2022

01:0175結(jié)束12/19/202212:1575 第5章繼承與多態(tài)76 第5章繼承與多態(tài)76全面掌握面向?qū)ο蟮幕咎卣髡莆杖绾问褂美^承性來到達軟件的重用深入掌握繼承過程中域的隱藏和方法的覆蓋技巧深入掌握抽象類和抽象方法的定義深入掌握接口的定義和使用技巧本章學(xué)習(xí)要點12/22/2022

01:0177本章學(xué)習(xí)要點12/19/202212:1577本章討論面向?qū)ο蟪绦蛟O(shè)計另外兩個最重要的特點:繼承和多態(tài)。繼承是面向?qū)ο蟪绦蛟O(shè)計方法中實現(xiàn)軟件重用的一種重要手段,通過繼承可以更有效地組織程序結(jié)構(gòu),明確類之間的關(guān)系,并充分利用已有的類來創(chuàng)建新類,通過繼承可以實現(xiàn)代碼的重用,以完成更復(fù)雜的設(shè)計、開發(fā)。多態(tài)則可以統(tǒng)一多個相關(guān)類的對外接口,并在運行時根據(jù)不同的情況執(zhí)行不同的操作,提高類的抽象度和靈活性。12/22/2022

01:0178本章討論面向?qū)ο蟪绦蛟O(shè)計另外兩個最重要的特點:繼承和多態(tài)。15.1子類、父類與繼承機制795.1子類、父類與繼承機制795.1.1繼承的概念在類的定義過程中,繼承是一種由已有的類創(chuàng)建新類的機制。繼承而得到的類為子類,被繼承的類為父類,父類包括所有直接或間接被繼承的類。在類的聲明中加入extends子句就可以創(chuàng)建一個類的子類:classSubClassextendsSuperClass{……}Java中不通過extends關(guān)鍵字支持多重繼承,即extends之后只能有唯一的父類。如果缺省extends子句,則該類為java.lang.Object的子類。子類可以繼承父類中訪問權(quán)限設(shè)定為public、protected和包可訪問的成員變量和方法,但是不能繼承訪問權(quán)限為private的成員變量和方法。12/22/2022

01:01805.1.1繼承的概念在類的定義過程中,繼承是一種由已有的5.1.1繼承的概念一個父類可以同時擁有多個子類,而每一個子類則只能有唯一的父類。子類是對公共域和方法在功能、內(nèi)涵方面的擴展和延伸。父類、子類間的關(guān)系具有:·共享性即子類可以共享父類的公共域和方法?!げ町愋约醋宇惡透割愐欢〞嬖谀承┎町?,否則就應(yīng)該是同一個類?!哟涡约从蒍ava規(guī)定的單繼承性,每個類都處于繼承關(guān)系中的某一個層面。12/22/2022

01:01815.1.1繼承的概念一個父類可以同時擁有多個子類,而每一5.1.2類的層次Java語言中類的是有嚴(yán)格的層次結(jié)構(gòu)的。除Object類之外,每個類都繼承惟一的父類。這種繼承性性質(zhì)使得類的層次結(jié)構(gòu)形成了如圖所示的一種樹狀結(jié)構(gòu)。Object類定義和實現(xiàn)了Java系統(tǒng)所需要的眾多類的共同行為,它是所有類的父類,也即這個樹狀結(jié)構(gòu)中的根類,所有的類都是由這個類繼承、擴充而來的,這個Object類定義在java.lang包中。

12/22/2022

01:01825.1.2類的層次Java語言中類的是有嚴(yán)格的層次結(jié)構(gòu)的5.1.2類的層次Java語言中類的層次結(jié)構(gòu)12/22/2022

01:01835.1.2類的層次Java語言中類的層次結(jié)構(gòu)12/19/5.2繼承的實現(xiàn)845.2繼承的實現(xiàn)845.2.1子類的定義定義一個子類,即在定義一個類的時候加上extends關(guān)鍵字,并在之后帶上其父類名,其一般格式為:[類的修飾符]class<子類名>extends<父類名>{<域定義>;<方法定義>;}這和前面定義類的格式并沒有什么區(qū)別,只是在定義子類時“extends<父類名>”不再是可選項。何時選擇繼承?一個很好的經(jīng)驗:“B是A中的一類嗎?”如果是則讓B做A的子類.12/22/2022

01:01855.2.1子類的定義定義一個子類,即在定義一個類的時候加5.2.1子類的定義classPoint{intx,y;voidsetXY(inti,intj){x=i;y=j;}}classCircleextendsPoint{doubler;doublearea(){return3.14*r*r;}}12/22/2022

01:01865.2.1子類的定義classPoint{12/195.2.1子類的定義電話及其子類的繼承關(guān)系

12/22/2022

01:01875.2.1子類的定義電話及其子類的繼承關(guān)系12/19/5.2.1子類的定義【例5.2】實現(xiàn)電話類的繼承結(jié)構(gòu)。為了代碼的簡潔,而把注意力集中在我們要討論的語法機制上,這里假設(shè)移動電話僅一種,電話的計費方式為:國內(nèi)長途和國際長途話費分別是市話費的3倍和9倍。

abstractclassTelephone{longphoneNumber;finalintlocal_Call=1;finalintdistance_Call=3;finalintinternational_Call=9;doublebalance;abstractbooleancharge_Mode(intcall_Mode);doublegetBalance(){returnbalance;}}12/22/2022

01:01885.2.1子類的定義【例5.2】實現(xiàn)電話類的繼承結(jié)構(gòu)。為5.2.2域的繼承與隱藏

1.域的繼承子類可以繼承父類的所有非私有域。例如各類電話類所包含的域分別為:Mobile_Phone類longphoneNumber;intlocal_Call;intdistance_Call;intinternational_Calldoublebalance;

來自繼承父類Telephone的5個基本域StringnetworkType;12/22/2022

01:01895.2.2域的繼承與隱藏1.域的繼承l(wèi)ongpho5.2.2域的繼承與隱藏

IP_Phone類longphoneNumber;intlocal_Call;intdistance_Call;intinternational_Calldoublebalance;

來自繼承父類Telephone的5個基本域doublemonthFee;來自繼承父類Fixed_Telephoneboolearnstarted;DateexpireDate;子類IP_Phone類中聲明的域12/22/2022

01:01905.2.2域的繼承與隱藏IP_Phone類long5.2.2域的繼承與隱藏

Ordinary_phone類longphoneNumber;intlocal_Call;intdistance_Call;intinternational_Calldoublebalance;

來自繼承父類Telephone的5個基本域doublemonthFee;來自繼承父類Fixed_TelephonebooleanlongdistanceService;booleaninternationalService;

子類Ordinary_phone類中聲明的域12/22/2022

01:01915.2.2域的繼承與隱藏Ordinary_phone類5.2.2域的繼承與隱藏

2.域的隱藏子類重新定義一個與從父類繼承來的域變量完全相同的變量,稱為域的隱藏。即子類中定義了與父類同名的域變量,就是子類變量對同名父類變量的隱藏。這里所謂隱藏是指子類擁有了兩個相同名字的變量,一個來自繼承父類,另一個由自己定義。在這種情況下,當(dāng)子類執(zhí)行繼承的父類方法時,處理的是父類的變量,而當(dāng)子類執(zhí)行它自己定義的方法時,所操作的就是它自定義的變量,而把來自繼承父類的變量“隱藏”起來了。12/22/2022

01:01925.2.2域的繼承與隱藏2.域的隱藏12/19/20classA classBextendsA{staticintdata_a=3; {staticintdata_a=5;} }classCextendsB{voidprint_out(){System.out.println(“data_a=”+data_a);System.out.println(“A.data_a=”+A.data_a);System.out.println(“B.data_a=”+B.data_a);}}classdemo{publicstaticvoidmain(Stringargs[]){Cc=newC();c.print_out();}}data_a=5A.data_a=3B.data_a=55.2.2域的繼承與隱藏12/22/2022

01:0193classA classBextendsAc5.2.2域的繼承與隱藏隱藏父類的剩余金額例5.3

12/22/2022

01:01945.2.2域的繼承與隱藏隱藏父類的剩余金額例5.3125.2.3方法的繼承與覆蓋

1.方法的繼承父類的非私有方法可以被子類所繼承。根據(jù)方法的繼承關(guān)系,將例5.3中電話類及其各子類所包含的方法列舉如下。(1)Telephone類abstractbooleancharge_Mode();doublegetBalance();(2)Fixed_Telephone類abstractbooleancharge_Mode();//來自繼承父類TelephonedoublegetBalance(); //來自繼承父類Telephone(3)Ordinary_phone類booleancharge_Mode();

doublegetBelance(); //來自繼承父類Fixed_Telephone12/22/2022

01:01955.2.3方法的繼承與覆蓋1.方法的繼承12/19/5.2.3方法的繼承與覆蓋2.方法的覆蓋方法的覆蓋(Override)是指子類重定義從父類繼承來的一個同名方法,此時父類和子類中都存在一個同名方法,父類這個方法在子類中不復(fù)存在。這是子類通過重新定義與父類同名的方法,實現(xiàn)自身的行為。方法覆蓋時應(yīng)遵循的原則:(1)覆蓋后的方法不能比被覆蓋的方法有更嚴(yán)格的訪問權(quán)限。(2)覆蓋后的方法不能比被覆蓋的方法產(chǎn)生更多的異常。12/22/2022

01:01965.2.3方法的繼承與覆蓋2.方法的覆蓋12/19/25.2.3方法的繼承與覆蓋classCar{intcolor_number;intdoor_number;intspeed;publicvoidpush_break(){speed=0;}publicvoidadd_oil(){…}}classTrash_CarextendsCar{doubleamount;publicvoidfill_trash(){…}

publicvoidpush_break(){speed=speed–10;}}12/22/2022

01:01975.2.3方法的繼承與覆蓋classCarclass5.2.3方法的繼承與覆蓋覆蓋方法的調(diào)用對于重寫的方法,Java運行時系統(tǒng)根據(jù)調(diào)用該方法的實例的類型來決定選擇哪個方法調(diào)用。publicclassDemoCar{publicstaticvoidmain(Stringargs[]){ CaraCar=newTrash_Car(); aCar.push_break();}}在這里,aCar.push_break()調(diào)用的是類Trash_Car中的push_break()方法將被調(diào)用。成員變量的隱藏和方法的覆蓋的意義在于:通過隱藏域和覆蓋方法可以把父類的狀態(tài)和行為改為自身的狀態(tài)和行為,對外統(tǒng)一名字與接口,又不失其繼承性。12/22/2022

01:01985.2.3方法的繼承與覆蓋覆蓋方法的調(diào)用public5.3多態(tài)性995.3多態(tài)性99多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計的又一個重要的技術(shù)和手段。多態(tài)性是指同名的不同方法在程序中共存。即為同一個方法名定義幾個版本的實現(xiàn),運行時根據(jù)不同情況執(zhí)行不同的版本。調(diào)用者只需使用同一個方法名,系統(tǒng)會根據(jù)不同情況,調(diào)用相應(yīng)的不同方法,從而實現(xiàn)不同的功能。多態(tài)性又被稱為“一個名字,多個方法”。12/22/2022

01:01100多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計的又一個重要的技術(shù)和手段。12/15.3.1多態(tài)性的概念多態(tài)性的實現(xiàn)有兩種方式:(1)覆蓋實現(xiàn)多態(tài)性通過子類對繼承父類方法的重定義來實現(xiàn)。使用時注意:在子類重定義父類方法時,要求與父類中方法的原型(參數(shù)個數(shù)、類型、順序)完全相同。(2)重載實現(xiàn)多態(tài)性在一個類中的定義多個同名方法的不同實現(xiàn)。定義方法時方法名相同,但方法的參數(shù)不同(參數(shù)的個數(shù)、類型、順序不同)。這些方法同名的原因是具有類似的功能且目的相同,但在實現(xiàn)該功能的具體方式和細節(jié)方面有所不同,因此需要定義多種不同的方法體12/22/2022

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

評論

0/150

提交評論