版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο蟪绦蛟O(shè)計(jì)lixiaodongmail@本講重點(diǎn)類和對象常用修飾符繼承與多態(tài)接口包的聲明和使用lixiaodongmail@類類的聲明成員變量成員方法構(gòu)造方法方法重載this關(guān)鍵字內(nèi)部類和抽象類類的使用lixiaodongmail@類的聲明類的定義一般形式如下:[modifiers]classclassname [extends
superclass[implementsinterfaces]]{
type
variable;//定義類的成員變量,數(shù)量不限
.........
typemethodname1(parameterlist){
//定義類的方法成員,數(shù)量不限
methodbody; } .........}lixiaodongmail@類的修飾符修飾符含義abstract聲明抽象類,需要子類提供方法實(shí)現(xiàn)final聲明最終類,不能被繼承public聲明公共類,能被任何對象訪問默認(rèn)聲明默認(rèn),同一包對象可以訪問publicclassPen{publicStringcolor;publicvoidsetColor(Stringc){ color=c;}}lixiaodongmail@成員變量類的成員變量表明類的狀態(tài),例如,在Pen類中聲明的成員變量color,表示的是筆的顏色。定義成員變量的一般格式如下:[modifiers]typeinstance-variable;
type是成員變量的數(shù)據(jù)類型,instance-variable是變量名,在一個(gè)類中,成員變量應(yīng)該是惟一的,且是一個(gè)合法的標(biāo)志符;[modifiers]是可選的成員變量修飾符lixiaodongmail@成員變量修飾符修飾符含義final指定此變量的值不能改變默認(rèn)默認(rèn)修飾符,同一包中可以訪問該變量public可以被任何對象訪問private只允許在自己類內(nèi)部訪問static聲明該變量為所有對象共享lixiaodongmail@成員方法類的成員方法定義了類的行為,一般用于對類的成員變量進(jìn)行操作。定義成員方法的一般格式如下:[modifiers]typemethodname(parameter-list){ method-body;}
type是成員方法的返回值類型,其類型可以是Java中的任何數(shù)據(jù)類型;methodname是方法名,可以是任何一個(gè)合法的標(biāo)識(shí)符;parameter-list是方法參數(shù)。lixiaodongmail@成員方法修飾符修飾符含義final指定此方法不能覆蓋默認(rèn)默認(rèn)修飾符,同一包中可以訪問該方法public可以被任何對象訪問private只允許在自己類內(nèi)部訪問static聲明該方法為所有對象共享lixiaodongmail@構(gòu)造方法構(gòu)造方法是一種特殊的方法,它的名稱與類的名稱相同,并且它不返回任何值,這是因?yàn)橐粋€(gè)類的構(gòu)造方法的返回值類型就是類本身。構(gòu)造函數(shù)一般不能由編程人員顯式的直接調(diào)用。例如,可以為Pen類定義一個(gè)構(gòu)造函數(shù),代碼如下:Pen(StringColor){color=Color;}lixiaodongmail@classPoint{ intx,y; Point(intx1,inty1){ //構(gòu)造方法
x=x1; y=y1; }}lixiaodongmail@構(gòu)造方法構(gòu)造方法沒有返回值。構(gòu)造方法不能從父類繼承。如果沒有為類定義任何構(gòu)造方法,系統(tǒng)將為該類定義一個(gè)缺省的默認(rèn)構(gòu)造方法,該方法既沒有形式參數(shù),也沒有任何具體的語句,不完成任何操作。構(gòu)造方法不能直接通過方法名引用,必須通過new運(yùn)算符。在構(gòu)造方法中可以調(diào)用當(dāng)前類和其父類的構(gòu)造方法,但必須是方法體的第一條語句。lixiaodongmail@構(gòu)造方法重載重載是根據(jù)參數(shù)的個(gè)數(shù)與類型來區(qū)分的。classPoint{intx,y;publicPoint(){}publicPoint(intx,inty){this.x=x;this.y=y;}}lixiaodongmail@this關(guān)鍵字Java包含一個(gè)特殊的引用——this引用。this引用總是指向當(dāng)前對象,即this引用當(dāng)前對象。this用法引用與參數(shù)同名成員變量;用在構(gòu)造方法中,調(diào)用同一個(gè)類中的其他構(gòu)造方法lixiaodongmail@publicclassPen{publicStringcolor=null;publicintlength;publicvoidsetColor(Stringcolor){
this.color=color;}Pen(Stringcolor){
this.color=color; }Pen(Stringcolor,intlength){
this(color);
this.length=length;}}lixiaodongmail@內(nèi)部類在一個(gè)類內(nèi)部定義的類,就是內(nèi)部類。內(nèi)部類可以直接訪問外部類的成員,包括private成員,但是,內(nèi)部類的成員卻不能被外部類直接訪問。lixiaodongmail@publicclassTest{ //…}publicclassA{ //…}publicclasstest{ //… publicclassa{ //… }}內(nèi)部類lixiaodongmail@publicclassOuterClass{privateintdate;publicvoidm(){//...}classInnerClass{publicvoidmi(){
date++;m();}}}lixiaodongmail@內(nèi)部類內(nèi)部類被編譯成名為OuterClassName$InnerClassName.class的類。內(nèi)部類可以引用定義在它外部類中的數(shù)據(jù)和方法。可見性修飾符可以作用于內(nèi)部類。內(nèi)部類可以在外部創(chuàng)建,創(chuàng)建語法格式為:OuterClass.InnerClassinnerObject= outerObject.newInnerClass();lixiaodongmail@抽象類和抽象方法用abstract修飾符修飾的類是抽象類。抽象類不能被實(shí)例化。抽象類中可以包含非抽象的方法。抽象方法也是用abstract來修飾。抽象方法只需要聲明,不需要實(shí)現(xiàn)。含有抽象方法的類必須聲明為抽象類,所有抽象方法被實(shí)現(xiàn)的子類才能生成對象。lixiaodongmail@publicabstractclassPen{Stringcolor;voidsetColor(Stringcolor){this.color=color;}StringgetColor(){returncolor;}publicabstractvoidmymethod();}publicclasssomePen
extendsPen{publicvoidmymethod(){System.out.println(“OK”);
}}lixiaodongmail@對象對象的創(chuàng)建和使用匿名對象用finalize方法清除對象對象的比較lixiaodongmail@對象的創(chuàng)建和使用創(chuàng)建對象Type對象名=newtype([參數(shù)列表])對象使用引用對象成員變量<對象名>.<變量名>引用對象成員方法<對象名>.<方法名>([參數(shù)列表])lixiaodongmail@匿名對象創(chuàng)建對象后,在調(diào)用該對象的方法時(shí),也可以不定義對象的引用,而直接調(diào)用這個(gè)對象的方法,這樣的對象叫做匿名對象
Penp1=newPen(); p1.setColor(“Green”);
newPen().setColor(“Green”);在下面的情況下可以使用匿名對象。如果對一個(gè)對象只需要進(jìn)行一次方法調(diào)用,那么就可以使用匿名對象。lixiaodongmail@用finalize方法清除對象在一個(gè)對象被銷毀之前,它將調(diào)用一個(gè)稱為終結(jié)函數(shù)的特殊方法,該方法完成一些必須的清除工作,如釋放資源等。這個(gè)特殊方法總是被命名為finalize。一個(gè)類中至多有一個(gè)終結(jié)函數(shù),而且許多類根本不需要終結(jié)函數(shù)finalize()方法通常聲明為protected,這樣能夠防止它被外部的方法意外地調(diào)用lixiaodongmail@classabc{
protectedvoidfinalize()throwsThrowable{ System.out.println("finalized"); }}publicclassb{ publicstaticvoidmain(Stringargs[]){ abca=newabc(); a=null; System.gc(); }}lixiaodongmail@對象的比較對象之間的比較,可以使用equals方法或“==”操作符,equals()方法主要用于比較兩個(gè)對象的內(nèi)容是否相同,“==”操作符主要用于比較兩個(gè)變量的值是否相等lixiaodongmail@classtest{ publicstaticvoidmain(Stringargs[]){ Doubled1=newDouble(1); Doubled2=newDouble(1); Doubled3=d1; System.out.println(d1==d2); System.out.println(d1==d3); System.out.println(d1.equals(d2)); System.out.println(d1.equals(d3)); }}lixiaodongmail@常用修飾符訪問控制修飾符static修飾符final修飾符lixiaodongmail@訪問控制修飾符Java規(guī)定可以選擇4種訪問控制方式:publicprivateprotected默認(rèn)
lixiaodongmail@Java修飾符的訪問權(quán)限publicdefaultprotectedprivate可被相同包的非子類訪問是是是否可被相同包的子類訪問是是是否可被不同包的非子類訪問是否否否可被不同包的子類訪問是否否否可被相同包的子類繼承是是是否可被不同包的子類繼承是否是否lixiaodongmail@classXiuShiFu{
publicinti;
privateintj;}classTestXiuShiFu{ publicstaticvoidmain(Stringargs[]){ XiuShiFux=newXiuShiFu(); x.i=10;
x.j=20; }}lixiaodongmail@staticstatic可以修飾數(shù)據(jù)成員和成員方法,表明是靜態(tài)的,靜態(tài)成員被類的所有對象共享靜態(tài)成員的訪問類名.靜態(tài)成員對象名.靜態(tài)成員(不建議使用)非靜態(tài)成員的訪問對象名.非靜態(tài)成員lixiaodongmail@b…t1.at2.atestt1=newtest();testt2=newtest();classtest{inta;staticintb;}t1.bt2.blixiaodongmail@classCount{
privateintnumber;//表示每個(gè)類對象的序列號
privatestaticintcounter=0;//靜態(tài)變量,負(fù)責(zé)計(jì)數(shù)
publicCount(){ counter++; number=counter; }publicstaticvoidmain(Stringargs[]){
CountA1=newCount(); System.out.println("A1是第:"+A1.number+"個(gè)對象");
CountA2
=newCount(); System.out.println("A2是第:"+A2.number+"個(gè)對象");
CountA3
=newCount(); System.out.println("A3是第:"+A3.number+"個(gè)對象"); }}System.out.println(A1.counter);System.out.println(Count.counter);lixiaodongmail@static靜態(tài)方法只能直接訪問靜態(tài)成員,不能直接訪問非靜態(tài)成員。非靜態(tài)方法可以直接訪問非靜態(tài)成員,也可以訪問靜態(tài)成員。main()方法是靜態(tài)的,所以在該方法中不能直接訪問該類中的非靜態(tài)成員,必須首先創(chuàng)建一個(gè)實(shí)例對象后,才能通過這個(gè)對象去訪問類中的非靜態(tài)成員。lixiaodongmail@publicclasstest{publicinttotal(inta,intb){ returna+b;}publicstaticvoidmain(String[]args){ intnum1=3; intnum2=4; System.out.println(total(num1,num2));
}}statictestt1=newtest();System.out.println(t1.total(num1,num2));lixiaodongmail@final修飾符final修飾符用于定義類、成員變量和成員方法的非繼承性修飾類–最終類,不能被繼承修飾成員變量—常量,不能被覆蓋修飾方法—不能被子類覆蓋lixiaodongmail@
繼承與多態(tài)繼承方法覆蓋方法重載super關(guān)鍵字多態(tài)性對象類型轉(zhuǎn)換lixiaodongmail@繼承類的繼承在類的定義過程中,用關(guān)鍵字extends來聲明的。一般格式如下:[ClassModifier]classClassName[extendsSuperClass][implementinterface]{ //類體}子類可以繼承父類的公共成員方法和成員變量,不能繼承私有成員方法、成員變量以及構(gòu)造方法子類可以定義與父類成員變量相同的變量,稱為成員變量的隱藏。lixiaodongmail@classPen{StringmyString="Pen'sString";voidshowPen(){System.out.println(myString);}}classPencilextendsPen{StringmyString="Pencil'sString";voidshowPencil(){System.out.println(myString);}}publicclassNewClass{publicstaticvoidmain(Stringargs[]){Pencilpcl=newPencil();pcl.showPen();pcl.showPencil();}}lixiaodongmail@方法覆蓋在類的繼承中,當(dāng)子類的成員變量與父類的成員變量同名時(shí),子類的成員變量會(huì)隱藏父類的成員變量。同樣,子類也可以重新定義與父類同名的方法,覆蓋父類的方法。方法覆蓋:在子類中,定義名稱、參數(shù)個(gè)數(shù)與類型均與父類相同的方法,用于重寫父類中方法的功能。lixiaodongmail@classPen{voiddisplay(){System.out.println("Pen'sfunction");}}classmyPenextendsPen{voiddisplay(){System.out.println("myPen'sfunction");}}publicclassOverrideExam{publicstaticvoidmain(Stringargs[]){myPenmp=newmyPen();mp.display();}}lixiaodongmail@方法重載方法的重載:在一個(gè)類的定義中有多個(gè)名稱相同的成員方法,但每個(gè)方法的參數(shù)類型、參數(shù)的個(gè)數(shù)可以不同,即類對自身已有的同名方法的重新定義lixiaodongmail@classPen{voidWrite(){System.out.println("Writenothing");}voidWrite(Stringlanguage){System.out.println("Writein"+language);}voidWrite(floatnum1,floatnum2){ System.out.print(num1+"+"+num2+"=");}}publicclassOverloadMethod{publicstaticvoidmain(Stringargs[]){Penp=newPen();
p.Write();
p.Write(”English”);
p.Write(2.0f,3.1f);}}lixiaodongmail@super關(guān)鍵字Java中通過super關(guān)鍵字來實(shí)現(xiàn)對父類成員的訪問。super—引用父類同名成員變量;用在構(gòu)造方法中,調(diào)用父類中的構(gòu)造方法lixiaodongmail@lixiaodongmail@多態(tài)性多態(tài)是一種在運(yùn)行時(shí)調(diào)用重寫方法的機(jī)制。因?yàn)樽宇愅ㄟ^繼承具備了父類的所有屬性,所以,子類對象可以作為父類對象使用,凡是在程序中可以使用父類對象的地方,都可以用子類對象來代替。對于重寫的方法,Java會(huì)根據(jù)調(diào)用該方法的實(shí)例的類型來決定選擇哪個(gè)方法。動(dòng)物--吃人--吃狗--吃動(dòng)物a;a=new人a.吃a=new狗a.吃消息--上課教師—上課學(xué)生—上課消息a;a=new教師a.上課a=new學(xué)生a.上課lixiaodongmail@classPen{voiddisplay(){System.out.println("Pen");}}classmyPenextendsPen{voiddisplay(){System.out.println("myPen");}}classPencilextendsPen{voiddisplay(){System.out.println("Pencil");}}publicclassNewClass{publicstaticvoidmain(Stringargs[]){Penp1=newPen();Penp2=newmyPen();Penp3=newPencil();p1.display();p2.display();p3.display();}}lixiaodongmail@對象類型轉(zhuǎn)換Java中兩個(gè)不同類型對象之間可以轉(zhuǎn)換,兩個(gè)轉(zhuǎn)換的對象之間應(yīng)該具有繼承關(guān)系,不是任意兩個(gè)類。子類對象類型可以轉(zhuǎn)換成它的父類類型。父類對象轉(zhuǎn)換成子類對象類型時(shí),要求父類對象實(shí)際上是子類的一個(gè)實(shí)例。Penp=newPencil();doubled=123;Pencilp1=(Pencil)p;inti=(int)d;lixiaodongmail@接口接口的定義接口的實(shí)現(xiàn)lixiaodongmail@接口的概念接口(interface)是Java所提供的一種重要功能,它的結(jié)構(gòu)和抽象類非常相似。接口是一種特殊的類,但接口與類存在著本質(zhì)的區(qū)別。類有成員變量和成員方法,而接口卻只有常量和抽象方法,也就是說接口的成員變量必須初始化,同時(shí)接口中的所有方法全部為abstract方法,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。Java語言通過接口使得互不相關(guān)的類具有相同的行為。
lixiaodongmail@接口的定義定義接口的一般格式如下:[public]interfaceinterfaceName[extendssuperInterface]{ //接口體……}其中,各字段的含義如下。public是可選項(xiàng),如果將接口定義為public類型,則處于任何位置的類都能夠訪問該接口。如果沒有指明接口的訪問類型,則默認(rèn)只有相同包中的類可以訪問該接口的定義。interface是定義接口的關(guān)鍵字。interfaceName為定義的接口的名字,該名稱為合法的Java標(biāo)識(shí)符。extends子句表示該接口有父接口。lixiaodongmail@接口的定義接口包含常量定義和方法定義,在接口中定義的常量可以被多個(gè)類共享,具有final、static屬性;接口中只對方法進(jìn)行聲明,沒有方法體,而且是用分號結(jié)尾,聲明的方法具有abstract屬性。lixiaodongmail@接口的實(shí)現(xiàn)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。[ClassModifier]classClassName[implementinterface]{ //類體}上述定義中,implement
interface字段為需要實(shí)現(xiàn)的接口。但該選項(xiàng)不是必選項(xiàng),并且一個(gè)類可以實(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年黑龍江農(nóng)墾職業(yè)學(xué)院單招綜合素質(zhì)考試模擬試題含詳細(xì)答案解析
- 2026上半年貴州事業(yè)單位聯(lián)考貴州省民政廳招聘10人參考考試題庫及答案解析
- 2026南光集團(tuán)校園招聘考試重點(diǎn)題庫及答案解析
- 2026年阿壩職業(yè)學(xué)院單招綜合素質(zhì)考試參考題庫含詳細(xì)答案解析
- 2026年江西婺源茶業(yè)職業(yè)學(xué)院單招綜合素質(zhì)考試備考試題含詳細(xì)答案解析
- 2026年江陰職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試備考試題含詳細(xì)答案解析
- 2026年南京旅游職業(yè)學(xué)院單招綜合素質(zhì)考試模擬試題含詳細(xì)答案解析
- 2026年江西青年職業(yè)學(xué)院單招綜合素質(zhì)筆試參考題庫含詳細(xì)答案解析
- 2026河南中原再擔(dān)保集團(tuán)科技融資擔(dān)保有限公司招聘4人考試重點(diǎn)試題及答案解析
- 2026年石家莊人民醫(yī)學(xué)高等??茖W(xué)校單招職業(yè)技能考試備考題庫含詳細(xì)答案解析
- 2025年公務(wù)員考試題庫(含答案)
- 2026年度宣城市宣州區(qū)森興林業(yè)開發(fā)有限公司第一批次員工公開招聘筆試備考題庫及答案解析
- 2025中國醫(yī)學(xué)科學(xué)院北京協(xié)和醫(yī)學(xué)院招聘26人備考題庫及答案詳解(奪冠系列)
- 2026年維修工崗位面試題庫含答案
- 《分布式光伏并網(wǎng)啟動(dòng)方案》
- 酒店委托管理合同范本
- 5.第五章-透鏡曲率與厚度
- 抖音賬號運(yùn)營服務(wù)抖音賬號運(yùn)營方案
- 宣傳片基本報(bào)價(jià)單三篇
- (正式版)SHT 3115-2024 石油化工管式爐輕質(zhì)澆注料襯里工程技術(shù)規(guī)范
- 消防應(yīng)急通信培訓(xùn)課件
評論
0/150
提交評論