版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章面向?qū)ο蟊菊聝?nèi)容編程語(yǔ)言的發(fā)展面向過程的設(shè)計(jì)思想面向?qū)ο蟮脑O(shè)計(jì)思想對(duì)象和類的概念類之間的關(guān)系對(duì)象和引用Java類的定義構(gòu)造函數(shù)對(duì)象的創(chuàng)建和使用this關(guān)鍵字static關(guān)鍵字package和import語(yǔ)句類的繼承方法的重寫final關(guān)鍵字對(duì)象轉(zhuǎn)型多態(tài)抽象類接口編程語(yǔ)言的發(fā)展機(jī)器語(yǔ)言---直接由計(jì)算機(jī)的指令組成,指令、數(shù)據(jù)、地址都是以“0”和“1”的符號(hào)串組成;可以被計(jì)算機(jī)直接執(zhí)行。匯編語(yǔ)言---用容易理解和記憶的符號(hào)表示指令、數(shù)據(jù)以及寄存器等,抽象層次很低,程序員需要考慮大量的機(jī)器細(xì)節(jié)。高級(jí)語(yǔ)言---屏蔽了機(jī)器的細(xì)節(jié),提高了語(yǔ)言的抽象層次,接近于人的自然語(yǔ)言,60年代出現(xiàn)的結(jié)構(gòu)化編程語(yǔ)言提出了結(jié)構(gòu)化數(shù)據(jù)和語(yǔ)句,數(shù)據(jù)和過程抽象等概念。面向?qū)ο蟮恼Z(yǔ)言---與以往的各種語(yǔ)言的根本不同的是,它的設(shè)計(jì)出發(fā)點(diǎn)是為了更能直接的描述問題域中客觀存在的事物。語(yǔ)言的發(fā)展是朝著人類更容易理解的方向前進(jìn)面向?qū)ο笤O(shè)計(jì)的思想面向?qū)ο笤O(shè)計(jì)的基本思想是,從現(xiàn)實(shí)世界中客觀存在的事物出發(fā)來(lái)構(gòu)造軟件系統(tǒng),并在系統(tǒng)的構(gòu)造中盡可能運(yùn)用人類的自然思維方式。面向?qū)ο蟾訌?qiáng)調(diào)運(yùn)用人類在日常的思維邏輯中經(jīng)常采用的思想方法與原則,如抽象、分類、繼承、聚合、多態(tài)等。面向過程的設(shè)計(jì)思想和面向?qū)ο蟮脑O(shè)計(jì)思想我要去新疆面向過程我開車,我掛檔,我踩油門,我過河北,我過陜西……面向?qū)ο笪颐钴嚾バ陆囋趺慈ゲ魂P(guān)我的事信息封存在車這個(gè)類的內(nèi)部我不用去了解車整個(gè)開動(dòng)的過程對(duì)象和類的概念對(duì)象是用計(jì)算機(jī)語(yǔ)言對(duì)問題域中事物的描述,對(duì)象通過“屬性(attribute)”和“方法(method)”來(lái)分別對(duì)應(yīng)事物所具有的靜態(tài)屬性和動(dòng)態(tài)屬性。類是用于描述同一類型的對(duì)象的一個(gè)抽象的概念,類中定義了這一類對(duì)象所具有的靜態(tài)和動(dòng)態(tài)屬性。類可以看成一類對(duì)象的模板,對(duì)象可以看成該類的一個(gè)具體實(shí)例。類(對(duì)象)之間的關(guān)系之關(guān)聯(lián)關(guān)系繼承關(guān)系(一般和特殊)XX是一種XX聚合關(guān)系(整體和部分)實(shí)現(xiàn)關(guān)系多態(tài)課堂練習(xí)抽象出下面系統(tǒng)中的“類”及其關(guān)系我要去新疆,這句話中的類和方法是什么?Java與面向?qū)ο髮?duì)象是Java程序的核心,在Java程序中“萬(wàn)事萬(wàn)物皆對(duì)象”。對(duì)象可以看成是靜態(tài)屬性(成員變量)和動(dòng)態(tài)屬性(方法)的封裝體。類是用來(lái)創(chuàng)建同一類型的對(duì)象的“模板”,在一個(gè)類中定義了該類對(duì)象所應(yīng)具有的成員變量以及方法。J2SDK提供了很多類供編程人員使用,編程人員也可以定義自己的類。我們的語(yǔ)言:成員變量=屬性方法=函數(shù)為什么用對(duì)象?面向?qū)ο蟮木幊?--一組對(duì)象互相配合通過溝通完成特定功能所有paradigm(范例)都是對(duì)現(xiàn)實(shí)問題的抽象匯編是對(duì)機(jī)器語(yǔ)言的抽象面向過程的語(yǔ)言是對(duì)匯編語(yǔ)言的抽象對(duì)象更加符合對(duì)于現(xiàn)實(shí)問題的抽象對(duì)象都有對(duì)外服務(wù)的接口通過繼承可以復(fù)用對(duì)象隱藏內(nèi)部服務(wù)的實(shí)現(xiàn)通過聚合可以復(fù)用面向?qū)ο蟾尤菀资刮覀冞_(dá)到這些年來(lái)苦苦追求的境界Reusable、Extensibility、維護(hù)和替換更加方便組件---比對(duì)象更高層次的抽象(二進(jìn)制級(jí)別)EJB、WebService、CORBA、COM、…成員變量成員變量可以是Java語(yǔ)言中任何一種數(shù)據(jù)類型(包括基本類型和引用類型)。在定義成員變量時(shí)可以對(duì)其初始化,如果不對(duì)其初始化,Java使用默認(rèn)的值對(duì)其初始化。(右圖)成員變量的作用范圍為整個(gè)類體。Dog.java面向?qū)ο蠡靖拍睢?/p>
Java語(yǔ)言中除基本類型之外的變量型都稱之為引用類型。
Java中的對(duì)象是通過引用對(duì)其操作的。例如:/**聲明了一個(gè)String類型的引用變量,*但并沒用使用它指向一個(gè)對(duì)象*/Strings;/*使用new語(yǔ)句創(chuàng)建了一個(gè)String類型的*對(duì)象并用s指向它,以后可以通過s完成*對(duì)其的操作*/s=newString(“Helloworld”);如何在內(nèi)容中區(qū)分類和對(duì)象?類是靜態(tài)的概念,在代碼區(qū)對(duì)象是new出來(lái)的,位于堆內(nèi)存,類的每個(gè)成員變量來(lái)自不同的對(duì)象中都有不同的值(除了靜態(tài)變量),而方法只有一份,執(zhí)行的時(shí)候才占有內(nèi)存。對(duì)象的創(chuàng)建和使用必須使用new關(guān)鍵字創(chuàng)建對(duì)象。使用對(duì)象(引用).
成員變量來(lái)引用對(duì)象的成員變量。使用對(duì)象(引用).
方法(參數(shù)列表)來(lái)調(diào)用對(duì)象的方法。同一類的每個(gè)對(duì)象有不同的成員變量存儲(chǔ)空間。同一類的每個(gè)對(duì)象共享該類的方法。類和對(duì)象的關(guān)系構(gòu)造方法(構(gòu)造函數(shù))使用new+構(gòu)造方法創(chuàng)建一個(gè)新的對(duì)象。構(gòu)造函數(shù)是定義在Java類中的一個(gè)用來(lái)初始化對(duì)象的函數(shù)。構(gòu)造函數(shù)與類同名且沒有返回值。例如:Person類的構(gòu)造函數(shù)publicclassPerson{intid;intage;Person(intn,inti){id=n;age=i;}}構(gòu)造函數(shù)
創(chuàng)建對(duì)象時(shí),使用構(gòu)造函數(shù)初始化對(duì)象的成員變量。
publicclassTest{publicstaticvoidmain(Stringargs[]){Persontom=newPerson(1,25);Personjoin=newPerson(2,27);Personkate=newPerson();}}構(gòu)造函數(shù)
當(dāng)沒有構(gòu)造函數(shù)時(shí),編譯器為類自動(dòng)添加形如類名(){}
的構(gòu)造函數(shù)。例如:classPoint{publicintx;publicinty;}---Pointp=newPoint();---約定俗成的命名規(guī)則類名的首字母大寫變量名和方法的首字母小寫運(yùn)用駝峰標(biāo)識(shí)實(shí)例(1)//定義如下類:classBirthDate{ privateintday; privateintmonth; privateintyear; publicBirthDate(intd,intm,inty){ day=d;month=m;year=y; } publicvoidsetDay(intd){day=d;} publicvoidsetMonth(intm){month=m;} publicvoidsetYear(inty){year=y;} publicintgetDay(){returnday;} publicintgetMonth(){returnmonth;} publicintgetYear(){returnyear;} publicvoiddisplay(){ System.out.println(day+“–”+month+“–”+year); }}實(shí)例(2)publicclassTest{ publicstaticvoidmain(Stringargs[]){ Testtest=newTest(); intdate=9; BirthDated1=newBirthDate(7,7,1970); BirthDated2=newBirthDate(1,1,2000); test.change1(date); test.change2(d1); test.change3(d2); System.out.println(“date=”+date); d1.display(); d2.display(); } publicvoidchange1(inti){i=1234;} publicvoidchange2(BirthDateb){b=newBirthDate(22,2,2004);} publicvoidchange3(BirthDateb){ b.setDay(22); }}方法的重載方法的重載是指一個(gè)類中可以定義有相同的名字,但參數(shù)不同的多個(gè)方法。調(diào)用時(shí),會(huì)根據(jù)不同的參數(shù)表選擇對(duì)應(yīng)的方法。例如:在Person類中添加如下的方法:voidinfo(){System.out.println(“Myidis”+id);}voidinfo(Stringt){System.out.println(t+“”+id+”“+age);}//運(yùn)行如下程序publicclassTest{publicstaticvoidmain(Stringargs[]){Personp=newPerson(1,20);();(“hello”);}}構(gòu)造方法的重載與普通方法一樣,構(gòu)造方法也可以重載;例如:課本79頁(yè)Student類的構(gòu)造方法作業(yè)創(chuàng)建一個(gè)基本類Desk,描述桌子的長(zhǎng)、寬、高和顏色屬性,其中長(zhǎng)、寬、高用double數(shù)據(jù)類型,顏色用String型。在基本類Desk中添加構(gòu)造方法Desk(doublea,doublew,doubleh),用來(lái)在創(chuàng)建桌子對(duì)象時(shí)指定桌子的長(zhǎng)、寬、高,顏色設(shè)置一個(gè)默認(rèn)值“白色”。在基本類Desk中添加構(gòu)造方法Desk(Stringc),用來(lái)在創(chuàng)建桌子對(duì)象時(shí)指定桌子的顏色,長(zhǎng)款高都設(shè)置默認(rèn)值1.0再加一個(gè)構(gòu)造方法,通過長(zhǎng)寬高和顏色四個(gè)屬性來(lái)定制桌子在測(cè)試類中創(chuàng)建長(zhǎng)為1.2,寬為2.5,高為1.0,顏色為黃色的桌子,添加輸出語(yǔ)句在控制臺(tái)上顯示該桌子的長(zhǎng)寬高和顏色。復(fù)習(xí):對(duì)象的創(chuàng)建和使用必須使用new關(guān)鍵字創(chuàng)建對(duì)象。使用對(duì)象.成員變量來(lái)引用對(duì)象的成員變量。使用對(duì)象.方法(參數(shù)列表)來(lái)調(diào)用對(duì)象的方法。同一類的每個(gè)對(duì)象有不同的成員變量存儲(chǔ)空間。同一類的每個(gè)對(duì)象共享該類的方法。非靜態(tài)方法是針對(duì)每個(gè)對(duì)象進(jìn)行調(diào)用變量的分類和作用域局部變量:定義在塊內(nèi)、方法內(nèi)的變量(包括方法的參數(shù))。作用域是以塊和方法為單位的,僅在定義該變量的塊或方法內(nèi)有效先定義賦值,然后再使用,不可以超前使用在查找時(shí),首先被查找。若局部變量與類成員變量名相同時(shí),則該類成員變量在方法體內(nèi)被暫時(shí)“屏蔽”起來(lái)。方法體內(nèi)不能定義靜態(tài)變量。類成員變量:定義在類內(nèi)、方法外的變量,使用了修飾符static的變量是靜態(tài)變量,也稱為類變量。作用域是以類為單位的一般情況下,類成員變量應(yīng)該先定義后使用。但類成員變量可以超前引用,即在定義位置前引用,但靜態(tài)變量不能超前引用靜態(tài)變量。注意:類外面不能有變量的聲明this關(guān)鍵字在類的方法定義中使用的this關(guān)鍵字代表使用該方法的對(duì)象的引用。當(dāng)必須指出當(dāng)前使用方法的對(duì)象是誰(shuí)時(shí)要使用this。有時(shí)使用this可以處理方法中成員變量和參數(shù)變量重名的情況。this可以看作是一個(gè)變量,它的值是當(dāng)前對(duì)象的引用??梢允褂胻his調(diào)用本類的其他構(gòu)造方法,但該語(yǔ)句出現(xiàn)的位置要求是所隸屬的構(gòu)造方法的第一條可執(zhí)行語(yǔ)句。Leaf.javaBall.javathis使用方法總結(jié)利用this.可以調(diào)用當(dāng)前對(duì)象的方法或?qū)傩浴R粋€(gè)類的若干構(gòu)造方法之間可以互相調(diào)用,當(dāng)一個(gè)構(gòu)造方法需要調(diào)用另一個(gè)構(gòu)造方法時(shí),應(yīng)使用this(實(shí)參列表),同時(shí)這條調(diào)用語(yǔ)句應(yīng)該是整個(gè)構(gòu)造方法中的第一條可執(zhí)行語(yǔ)句。在利用this調(diào)用構(gòu)造方法時(shí),根據(jù)實(shí)參的個(gè)數(shù)匹配調(diào)用的是那個(gè)其他的構(gòu)造方法。當(dāng)方法需返回當(dāng)前正在討論的對(duì)象時(shí),可以使用returnthis形式。static關(guān)鍵字在類中,用static聲明的成員變量為靜態(tài)成員變量,它為該類的公用變量,在第一次使用時(shí)被初始化,對(duì)于該類的所有對(duì)象來(lái)說,static成員變量只有一份。用static聲明的方法為靜態(tài)方法,在調(diào)用該方法時(shí),不會(huì)將對(duì)象的引用傳遞給它,所以在static方法中不可訪問非static的成員??梢酝ㄟ^對(duì)象引用或類名(不需要實(shí)例化)訪問靜態(tài)成員。Cat.javaEmpTest.java靜態(tài)初始化器靜態(tài)屬性和非靜態(tài)屬性都需要初始化,非靜態(tài)屬性的初始化可以在聲明的同時(shí)進(jìn)行,也可以放在構(gòu)造方法中完成。而對(duì)于靜態(tài)屬性,這兩種方式的初始化效果不同。Student.java作為靜態(tài)屬性,可以在靜態(tài)初始化器中完成初始化靜態(tài)屬性可以在兩個(gè)地方完成初始化賦值工作,一是在聲明時(shí),二是在靜態(tài)初始化器中。語(yǔ)法如下:static{
靜態(tài)屬性名=初始值;}package和import語(yǔ)句為便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,解決類的命名沖突問題,Java引入包(package)機(jī)制,提供類的多重命名空間。package和import語(yǔ)句package語(yǔ)句作為Java源文件的第一條語(yǔ)句,指明該文件中定義的類所在的包。(若缺省該語(yǔ)句,則指定為無(wú)名包)。它的格式為:packagepkg1[.pkg2[.pkg3…]];Java編譯器把包對(duì)應(yīng)于文件系統(tǒng)的目錄管理,package語(yǔ)句中,用‘.’來(lái)指明包(目錄)的層次,例如使用語(yǔ)句packagecom.sww;則該文件中所有的類位于.\com\sww目錄下設(shè)置Classpath變量javac–d.Book.javapackage和import語(yǔ)句如果將一個(gè)類打包,則使用該類時(shí),必須使用該類的全名(例如:com.sww.MyClass),Java編譯器才會(huì)找到該類。也可以使用import在文件的開頭引入要使用到的類,例如:可以不需要用import語(yǔ)句直接使用java.lang包中的類。
importcom.sww.MyClass;importjava.util.*;//引入java.util包中的所有的類
………MyClassmyClass=newMyClass();//可以直接使用類名
………packageimport總結(jié)如果想將一個(gè)類放入包中,在這個(gè)類源文件第一句話寫package必須保證該類的class文件位于正確目錄下該類的源碼可能會(huì)產(chǎn)生影響刪除或轉(zhuǎn)移到另外的目錄另外的類想訪問的話:寫全名引入.具體類名訪問位于同一個(gè)包中的類不需要引入必須使class文件的最上層包的父目錄位于classpath下J2SDK中主要的包介紹java.lang—包含一些Java語(yǔ)言的核心類,如String、Math、Integer、System和Thread,提供常用的功能。java.awt---包含了構(gòu)成抽象窗口工具類(abstractwindowtoolkits)的多個(gè)類,這些類被用來(lái)構(gòu)建和管理應(yīng)用程序的圖形用戶界面(GUI)。java.applet—包含applet運(yùn)行所需的一些類?!瑘?zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類。java.io—包含能提供多種輸入/輸出功能的類。java.util—包含一些使用工具類,如定義系統(tǒng)特性、使用與日期日歷相關(guān)的函數(shù)。jar-cvfxx.jar*.*類的繼承與權(quán)限控制Java中使用extends關(guān)鍵字實(shí)現(xiàn)類的繼承機(jī)制,其語(yǔ)法規(guī)則為:
<modifier>class<name>[extends]<superclass>]{……}通過繼承,子類自動(dòng)擁有了基類(superclass)的所有成員(成員變量和方法)。java只支持單繼承,不允許多繼承;一個(gè)子類只能有一個(gè)基類一個(gè)基類可以派生出多個(gè)子類//繼承中的權(quán)限控制classParent{privateintn_private=1;intn_friendly=2;protectedintn_protected=3;publicintn_public=4;}classChildextendsParent{publicvoidf(){n_private=10;n_friendly=20;n_protected=30;n_public=40;}}訪問控制Java權(quán)限修飾符publicprotectedprivate置于類的成員定義前,用來(lái)限定其他對(duì)象對(duì)該類對(duì)象成員的訪問權(quán)限。對(duì)于class的權(quán)限修飾只可以用public和defaultpublic類可以在任意地方被訪問
default類只可以被同一個(gè)包內(nèi)部的類訪問Rectangle.javaCubic.java繼承中的訪問修飾符父子類在同一包中定義子類可以無(wú)條件地繼承父類的所有非私有屬性父子類在不同包中定義只有父類中被public和protected修飾的屬性能被子類繼承下來(lái)父類中缺省修飾符修飾的屬性不能被子類所引用方法的重寫在子類中可以根據(jù)需要對(duì)從基類中繼承來(lái)的方法進(jìn)行重寫。重寫方法必須和被重寫方法具有相同方法名稱、參數(shù)列表和返回類型。重寫方法不能使用比被重寫方法更嚴(yán)格的訪問權(quán)限。TestOverWrite.javasuper關(guān)鍵字在Java中使用super來(lái)引用基類的成分;例如:
classFatherclass{publicintvalue;publicvoidf(){value=100;system.out.println(“FatherClass.value=”+value);}}classChildClassextendsFatherClass{publicintvalue;publicvoidf(){super.f();value=200;System.out.println(“ChildClass.value=”+value);System.out.println(value);System.out.println(super.value);}}TestInherit.java繼承中的構(gòu)造方法子類的構(gòu)造過程中必須調(diào)用其基類的構(gòu)造方法。子類可以在自己的構(gòu)造方法中使用super(argument_list)調(diào)用基類的構(gòu)造方法。使用this(argument_list)調(diào)用本類的另外的構(gòu)造方法如果使用super,必須寫在子類構(gòu)造方法的第一行如果子類的構(gòu)造方法中沒有顯式地調(diào)用基類構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用基類無(wú)參數(shù)的構(gòu)造方法。如果子類構(gòu)造方法中既沒有顯式調(diào)用基類構(gòu)造方法,而基類中又沒有無(wú)參的構(gòu)造方法,則編譯出錯(cuò)。TestSuperSub.java課堂練習(xí)classA{ protectedvoidprint(Strings){ System.out.println(s); } A(){print(“A()”);} publicvoidf(){print(“A:f()”);}}classBextendsA{ B(){super();print(“B()”);} publicvoidf(){print(“B:f()”);} publicstaticvoidmain(Stringargs[]){ Bb=newB();b.f(); }}
分析輸出結(jié)果,體會(huì)構(gòu)造函數(shù)和一般成員函數(shù)在繼承中的區(qū)別。OverWriteOverRide實(shí)例(1)classPerson{ privateStringname; privateStringlocation; Person(Stringname){ =name; location=“beijing”; } Person(Stringname,Stringlocation){ =name; this.location=location; } publicStringinfo(){ return“name:“+name+”location:“+location; }}classStudentextendsPerson{ privateStringschool; Student(Stringname,Stringschool){ this(name,school,”beijing”); }
Student(Stringn,Stringl,Stringschool){ super(n,l); this.school=school; } publicStringinfo(){ ()+”school:“+school; }}實(shí)例(2)publicclassTest{ publicstaticvoidmain(String[]args){ Personp1=newPerson(“A”); Personp2=newPerson(“B”,”shanghai”); Students1=newStudent(“C”,”S1”); Students2=newStudent(“C”,”shanghai”,”S2”); System.out.println(()); System.out.println(()); System.out.println(()); System.out.println(()); }}分析輸出結(jié)果和對(duì)象的構(gòu)造過程:課堂練習(xí)根據(jù)上面的程序,構(gòu)造“Teacher”類,繼承“Person”類。要求:增加”職稱(String)”屬性.具有和”Student”類類似的重載構(gòu)造方法.重寫“Person”類的info()方法,增加職稱信息.Object類Object類是所有Java類的根基類如果在類的聲明中未使用extends關(guān)鍵字指明其基類,則默認(rèn)基類為Object類
publicclassPerson{…….}
等價(jià)于:
publicclassPersonextendsObject{……}toString方法Object類中定義有publicStringtoString()方法,其返回值是String類型,描述當(dāng)前對(duì)象的有關(guān)信息。在進(jìn)行String與其它類型數(shù)據(jù)的連接操作時(shí)(如:System.out.println(“info”+person)),將自動(dòng)調(diào)用該對(duì)象類的toString()方法可以根據(jù)需要在用戶自定義類型中重寫toString()方法。TestToString.javaequals方法Object類中定義有:publicbooleanequals(Objectobj)方法提供定義對(duì)象是否“相等”的邏輯。Object的equals方法定義為:x.equals(y)當(dāng)x和y是同一個(gè)對(duì)象的引用時(shí)返回true否則返回falseJ2SDK提供的一些類,如String,Date等,重寫了Object的equals方法,調(diào)用這些類的equals方法,x.equals(y),當(dāng)x和y所引用的對(duì)象是同一類對(duì)象且屬性內(nèi)容相等時(shí)(并不一定是相同對(duì)象),返回true否則返回false??梢愿鶕?jù)需要在用戶自定義類中重寫equals方法。TestEquals.java對(duì)象轉(zhuǎn)型(casting)一個(gè)基類的引用類型變量可以“指向”其子類的對(duì)象。一個(gè)基類的引用不可以訪問其子類對(duì)象新增加的成員(屬性和方法)??梢允褂靡米兞縤nstanceof類名來(lái)判斷該引用型變量所“指向”的對(duì)象是否屬于該類或該類的子類。子類的對(duì)象可以當(dāng)作基類的對(duì)象來(lái)使用稱作向上轉(zhuǎn)型(upcasting),反之稱為向下轉(zhuǎn)型(downcasting)對(duì)象轉(zhuǎn)型實(shí)例1(1)classAnimal{ publicStringname; Animal(Stringname){ =name; }classCatextendsAnimal{ publicStringeyesColor; Cat(Stringn,Stringc){ super(n);eyeColor=c; }}classDogextendsAnimal{ publicStringfurColor; Dog(Stringn,Stringc){ super(n);furColor=c; }}對(duì)象轉(zhuǎn)型實(shí)例1(2)publicclassTest{ publicstaticvoidmain(Stringargs[]){ Animala=newAnimal(“name”); Catc=newCat(“catname”,”blue”); Dogd=newDog(“dogname”,”black”); System.out.println(ainstanceofAnimal);//true System.out.println(cinstanceofAnimal);//true System.out.println(dinstanceofAnimal);//true System.out.println(ainstanceofCat);//false a=newDog(“bigyellow”,“yellow”); System.out.println();//bigyellow System.out.println(a.furColor);//!error System.out.println(ainstanceofAnimal);//true
System.out.println(ainstanceofDog);//true Dogd1=(Dog)a;//要加強(qiáng)制轉(zhuǎn)換符
System.out.println(d1.furColor);//yellow }}對(duì)象轉(zhuǎn)型實(shí)例2publicclassTest{ publicstaticvoidmain(String[]args){ Testtest=newTest(); Animala=newAnimal(“name”); Catc=newCat(“catname”,“blue”); Dogd=newDog(“dogname”,”black”; test.f(a);test.f(c);test.f(d); } publicvoidf(Animala){ System.out.println(“name:“+); if(ainstanceofCat){ Catcat=(Cat)a; System.out.println(““+cat.eyesColor+”eyes”); }elseif(ainstanceofDog){ Dogdog=(Dog)a; System.out.println(““+dog.furColor+”fur”); } }}動(dòng)態(tài)綁定和多態(tài)動(dòng)態(tài)綁定是指在執(zhí)行期間(而非編譯期)判斷所引用對(duì)象的實(shí)際類型,根據(jù)其實(shí)際的類型調(diào)用其相應(yīng)的方法。上面例子中,根據(jù)Lady對(duì)象的成員變量pet所引用的不同的實(shí)際類型而調(diào)用相應(yīng)的enjoy方法。classBirdextendsAnimal{ privateStringfeatherColor; Bird(Stringn,Stringf){ super(n); featherColor=f; } publicvoidenjoy(){ System.out.pringln(“鳥叫聲……”); }publicclassTest{ publicstaticvoidmain(Stringargs[]){ Ladyl3=newLady(“l(fā)3”,newBird(“birdname”,”green”); ls.myPetEnjoy(); }}動(dòng)態(tài)綁定使軟件可擴(kuò)展性達(dá)到極致,三個(gè)條件:1要有繼承2要有重寫3父類引用指向子類對(duì)象TestPolymoph.java抽象類用abstract關(guān)鍵字來(lái)修飾一個(gè)類時(shí),這個(gè)類叫做抽象類;用abstract來(lái)修飾一個(gè)方法時(shí),該方法叫做抽象方法。含有抽象方法的類必須被聲明為抽象類,抽象類必須被繼承,抽象方法必須被重寫。抽象類不能被實(shí)例化抽象方法只需聲明,而不需實(shí)現(xiàn)。abstractclassAnimal{privateStringname;Animal(Stringname){=name;}publicabstractvoidenjoy();}classCatextendsAnimal{privateStringeyesColor;Cat(Stringn,Stringc){super(n);eyesColor=c;}publicvoidenjoy(){System.out.println(“貓叫聲……”);}}final關(guān)鍵字final的變量的值不能夠被改變final的成員變量final的局部變量(形參)final的方法不能夠被重寫final的類不能夠被繼承String,Math等類都屬于finalTestFinal.java接口接口(interface)是抽象方法和常量值的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實(shí)現(xiàn)。接口定義舉例:publicinterfaceRunner{publicstaticfinalintid=1;publicvoidstart();publicvoidrun();publicvoidstop();}接口特性接口可以實(shí)現(xiàn)多重實(shí)現(xiàn);接口中聲明的屬性默認(rèn)為publicstaticfinal的;也只能是publicstaticfinal的;接口中只能定義抽象方法,而且這些方法默認(rèn)為public的、也只能是public的;接口可以繼承其他的接口,并添加新的屬性和抽象方法。接口多個(gè)無(wú)關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口。與繼承關(guān)系類似,接口與實(shí)現(xiàn)類之間存在多態(tài)性。定義Java類的語(yǔ)法格式
<modifier>class<name>[extends<superclass>][implements<interface>[,<interface>]*]{<declarations>*}接口舉例interfaceSinger{publicvoidsing();publicvoidsleep();}classStudentimplementsSinger{privateStringname;Student(Stringname){=name;}publicvoidstudy(){System.out.println(“studying”);}publicStringgetName(){returnname;}publicvoidsing(){System.out.println(“studentissinging”);}publicvoidsleep(){System.out.println(“studentissle
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 服裝商務(wù)匯報(bào)
- 智能照明布線施工合同
- 借支逾期處理與催收
- 影視行業(yè)招投標(biāo)與合同管理流程
- 4S店店長(zhǎng)招聘合同模板
- 三亞市電動(dòng)自行車道路施工通告
- 稀土礦場(chǎng)地平整服務(wù)協(xié)議
- 在線培訓(xùn)系統(tǒng)服務(wù)器租賃合同
- 化妝品工程水暖系統(tǒng)施工合同
- 汽車制造招投標(biāo)管理流程
- 簽署勞動(dòng)合同培訓(xùn)
- 鋰電池供應(yīng)商的合作協(xié)議書范文
- 杭州市2025屆高三教學(xué)質(zhì)量檢測(cè)(一模) 英語(yǔ)試題卷(含答案解析)
- 2024年商場(chǎng)員工管理制度(四篇)
- 培訓(xùn)教學(xué)課件模板
- 系統(tǒng)架構(gòu)師論文(經(jīng)典范文6篇)
- 農(nóng)業(yè)科技園區(qū)發(fā)展規(guī)劃
- 質(zhì)量為綱-華為公司質(zhì)量理念與實(shí)踐
- JBT 1306-2024 電動(dòng)單梁起重機(jī)(正式版)
- TCALC 003-2023 手術(shù)室患者人文關(guān)懷管理規(guī)范
- 特別的人歌詞
評(píng)論
0/150
提交評(píng)論