Java面向?qū)ο蟪绦蛟O(shè)計-課件 第3-4章 Java類和對象、繼承和接口_第1頁
Java面向?qū)ο蟪绦蛟O(shè)計-課件 第3-4章 Java類和對象、繼承和接口_第2頁
Java面向?qū)ο蟪绦蛟O(shè)計-課件 第3-4章 Java類和對象、繼承和接口_第3頁
Java面向?qū)ο蟪绦蛟O(shè)計-課件 第3-4章 Java類和對象、繼承和接口_第4頁
Java面向?qū)ο蟪绦蛟O(shè)計-課件 第3-4章 Java類和對象、繼承和接口_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

13類和對象-1程序語言的發(fā)展面向機器(機器語言、匯編語言)可讀性、可維護(hù)、移植性差;效率高。面向過程核心:算法+數(shù)據(jù)結(jié)構(gòu)缺陷:隨著應(yīng)用程序的規(guī)模擴大,操作與數(shù)據(jù)分離所帶來的維護(hù)工作量越來越大不適用于GUI界面、事件驅(qū)動編程面向?qū)ο竺嫦驅(qū)ο笤O(shè)計思想的要點認(rèn)為客觀世界由各種對象組成,任何事物都是對象,復(fù)雜的對象可以由比較簡單的對象以某種方式組合而成。把所有對象都劃分成各種對象類,每個對象類都定義了一組數(shù)據(jù)和一組方法。按照子類與父類的關(guān)系,把若干個對象類組成一個層次結(jié)構(gòu)的系統(tǒng)。對象彼此之間僅能通過傳遞消息互相聯(lián)系

抽象性 封裝性 繼承性多態(tài)性面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點開發(fā)時間短,效率高,可靠性高,所開發(fā)的程序更強壯。由于面向?qū)ο缶幊痰目芍赜眯?,可以在?yīng)用程序中大量采用成熟的類庫,從而縮短了開發(fā)時間。應(yīng)用程序更易于維護(hù)、更新和升級。繼承和封裝使得應(yīng)用程序的修改帶來的影響更加局部化??芍赜眯?可擴展性 可管理性51.面向?qū)ο蟮母拍瞵F(xiàn)實世界 :人、狗、書計算機模型:類是對象的模板,對象是類的實例

classPerson{}

Personp=newPerson();intx=9;int[]a=newint[]{1,2,3};Strings=newString(“qaz”);6現(xiàn)實生活中的對象對象在程序中是通過一種抽象數(shù)據(jù)類型來描述的,這種抽象數(shù)據(jù)類型稱為類(class)。classCar{intcolorNo;intdoorNumber;

intspeed;

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

抽象數(shù)據(jù)類型7……Carcar1;Carcar2;…

…CarcarN;方法構(gòu)造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有類型,構(gòu)造方法也可以重載。方法重載:一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,或者是某個參數(shù)的類型不同。實例方法和類方法classA{inta;floatmax(floatx,floaty){//實例方法

…}

staticfloatjerry(){//類方法

…}

staticvoidspeak(Strings){//類方法

…}}實例方法既能對類變量操作也能對實例變量操作,而類方法只能對類變量進(jìn)行操作。實例方法可以調(diào)用該類中的實例或類方法;類方法只能調(diào)用該類的類方法,不能調(diào)用實例方法。靜態(tài)的是屬于類的,實例的屬于對象實例。成員變量、類變量、局部變量對象的內(nèi)存模型(引用、指針\堆和棧)創(chuàng)建一個對象包括對象的聲明和為對象分配classPoint{intx,y;Point(inta,intb){x=a;y=b;}}Pointp1=newPoint(5,15);Pointp2=newPoint(8,18);p1=p2;參數(shù)的傳遞this關(guān)鍵字包是Java語言中有效地管理類的一個機制包名的目的是有效的區(qū)分名字相同的類,不同Java源文件中兩個類名字相同時,它們可以通過隸屬不同的包來相互區(qū)分com.sun.java.Hello.class包和import15訪問權(quán)限當(dāng)類可以被訪問時,對類的成員變量和成員方法而言,其應(yīng)用范圍可以通過施以一定的訪問權(quán)限來限定。 類內(nèi) 包內(nèi) 子類 任意 公共的(public) ★ ★ ★ ★ 保護(hù)的(protected)★ ★ ★ 包訪問(缺?。?★ ★ 私有的(private) ★基本類型的類包裝

提供了基本數(shù)據(jù)類型相關(guān)的類,這些類在java.lang包中,分別是:Byte、Integer、Short、Long、Float、Double和Character類.自動裝箱就是允許把一個基本數(shù)據(jù)類型的值直接賦值給基本數(shù)據(jù)類型相對應(yīng)的類的實例,例如:

Integernumber=100;或

intm=100;Integernumber=m;上述語句的裝箱過程是:Integernumber=newInteger(m);自動拆箱就是允許把基本數(shù)據(jù)類型的類的實例當(dāng)作相應(yīng)的基本數(shù)據(jù)類型來使用,例如:number是一個Integer對象,那么允許:

intx=number+number;上述語句的拆箱過程是:intx=Value()+Value();4.11基本類型的類包裝

4.11.1Double和Float類4.11.2Byte、Short、Integer、Long類4.11.3Character類4.11.4自動裝箱與拆箱自動裝箱就是允許把一個基本數(shù)據(jù)類型的值直接賦值給基本數(shù)據(jù)類型相對應(yīng)的類的實例,例如:

Integernumber=100;或

intm=100;Integernumber=m;上述語句的裝箱過程是:Integernumber=newInteger(m);自動拆箱就是允許把基本數(shù)據(jù)類型的類的實例當(dāng)作相應(yīng)的基本數(shù)據(jù)類型來使用,例如:number是一個Integer對象,那么允許:

intx=number+number;上述語句的拆箱過程是:intx=Value()+Value();18子類子類是作為另一個類的擴充或修正而定義的一個類。bicycle(superclass)MountainbikesRacingbikesTandembikessubclass19繼承繼承使得子類可以利用父類中定義的方法和變量,就像它們屬于子類本身一樣。classEmployee{Stringname;publicvoidshowInfo(){System.out.println(name);}}

classManagerextendsEmployee{Stringdepartment;publicvoidshowInfo(){System.out.println(name);System.out.println(“Managerof”+department);}}

20方法override和成員變量的隱藏覆蓋使得在子類中可以重新定義父類中已有的方法,從而是子類具有自己的行為。classEmployee{Stringname;publicvoidshowInfo(){System.out.println(name);}}

classManagerextendsEmployee{Stringdepartment;

Stringname;publicvoidshowInfo(){System.out.println(name);System.out.println(“Managerof”+department);}}

21繼承的例子ShapePointCircleCylinder何時選擇繼承?一個很好的經(jīng)驗:“B是一個A嗎?”如果是則讓B做A的子類.在更多的時候,組成關(guān)系比繼承更能使系統(tǒng)具有高度的靈活性,可維護(hù)行,并且提高系統(tǒng)的可重用性。ShapePointCircleCylinder22方法覆蓋時應(yīng)遵循的原則:覆蓋后的方法不能比被覆蓋的方法有更嚴(yán)格的訪問前提條件。覆蓋后的方法不能比被覆蓋的方法產(chǎn)生更多的例外,也不能有更松的事后條件。super1、子類如果想明確使用父類的構(gòu)造方法,必須在子類的構(gòu)造方法中使用關(guān)鍵字super來調(diào)用父類的構(gòu)造方法,而且super必須是子類構(gòu)造方法中的頭一條語句。3、在父類中定義構(gòu)造方法時,應(yīng)盡量寫一個不帶參數(shù)的構(gòu)造方法,以防子類省略super時出現(xiàn)錯誤。2、在子類的構(gòu)造方法中,沒有明顯地寫出super關(guān)鍵字來調(diào)用父類的某個構(gòu)造方法,那么默認(rèn)地有:super();即調(diào)用父類的不帶參數(shù)的構(gòu)造方法。2、final類不能被繼承,即不能有子類。1、final關(guān)鍵字可以修飾類、成員變量和方法中的局部變量。3、修飾方法,則不允許子類重寫父類的final方法。4、成員變量或局部變量被修飾為final的,就是常量。常量在聲明時沒有默認(rèn)值,所以在聲明常量時必須指定該常量的值,而且不能再發(fā)生變化。final對象的上轉(zhuǎn)型1.上轉(zhuǎn)型對象不能操作子類新增的成員變量(失掉了這部分屬性);不能調(diào)用子類新增的方法(失掉了一些功能)。2.上轉(zhuǎn)型對象可以訪問子類繼承或隱藏的成員變量,也可以調(diào)用子類繼承的方法或子類的重寫方法。上轉(zhuǎn)型對象操作子類繼承的方法或子類重寫的方法,其作用等價于子類對象去調(diào)用這些方法。因此,如果子類重寫了父類的某個方法后,當(dāng)對象的上轉(zhuǎn)型對象調(diào)用這個方法時一定是調(diào)用了子類重寫的方法。多態(tài)多態(tài):不同的對象收到同一個消息可產(chǎn)生完全不同的效果

或同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力多態(tài)的效果:用戶發(fā)送一個通用的消息,而實現(xiàn)的細(xì)節(jié)則由接收對象自行決定。多態(tài)的作用:增強了操作的透明性、可理解性和可擴展性。增強了軟件的靈活性和重用性。多態(tài)存在的三個必要條件繼承重寫父類引用指向子類對象2627抽象類抽象類:用abstract關(guān)鍵字來修飾一個類時,該類叫做抽象類;抽象類必須被繼承。抽象類不能被直接實例化。它只能作為其它類的超類,這一點與最終類(final類)正好相反。抽象方法:用abstract來修飾一個方法時,該方法叫做抽象方法。抽象方法必須被重寫抽象方法只有聲明,不能有實現(xiàn)。定義了抽象方法的類必須是抽象類。abstract類的理解

1、抽象類可以抽象出重要的行為標(biāo)準(zhǔn),該行為標(biāo)準(zhǔn)用抽象方法來表示。即抽象類封裝了子類必需要有的行為標(biāo)準(zhǔn)。2、抽象類聲明的對象可以成為其子類的對象的上轉(zhuǎn)型對象,調(diào)用子類重寫的方法,即體現(xiàn)子類根據(jù)抽象類里的行為標(biāo)準(zhǔn)給出的具體行為。3、多態(tài)核心技術(shù)之一是使用上轉(zhuǎn)型對象,即將abstract類聲明對象作為其子類的上轉(zhuǎn)型對象,那么這個上轉(zhuǎn)型對象就可以調(diào)用子類重寫的方法。4、利用多態(tài)設(shè)計程序的好處是,可以體現(xiàn)程序設(shè)計的所謂開-閉原則。開-閉原則強調(diào)一個程序應(yīng)當(dāng)對擴展開放,對修改關(guān)閉,增強代碼的可維護(hù)性。29接口(interface)JDK8版本之前,接口體中只有抽象方法.所有的static常量的訪問權(quán)限一定都是public(允許省略public、final和static修飾符,接口中不會有變量)interfacePrintable{

publicstaticfinalintMAX=100;//等價寫法:intMAX=100;

publicabstractvoidadd();

//等價寫法:voidadd();}publicinterfacePrintable{publicstaticfinalintMAX=100;//等價寫法:intMAX=100;publicabstractvoidon();//等價寫法:voidon();publicdefaultintmax(inta,intb){//default方法returna>b?a:b;}

publicstaticvoidf(){System.out.println("注意是從JavaSE8開始的");}}classAimplementsPrintable,Addable{}一個類實現(xiàn)了某個接口,那么這個類就自然擁有了接口中的常量,default方法(去掉了default關(guān)鍵字),該類也可以重寫接口中的default方法(注意,重寫時需要去掉default關(guān)鍵字)。如果一個非abstract類實現(xiàn)了某個接口,那么這個類必須重寫該接口的所有abstract方法,即去掉ab

溫馨提示

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

評論

0/150

提交評論