資源描述:
《Java面向?qū)ο蟪绦蛟O(shè)計(jì)與系統(tǒng)開(kāi)發(fā)第3章面向?qū)ο笤O(shè)計(jì)思想》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、面向?qū)ο蟪绦蛟O(shè)計(jì)與系統(tǒng)開(kāi)發(fā)第3章面向?qū)ο笤O(shè)計(jì)思想2驅(qū)動(dòng)任務(wù)一創(chuàng)建一個(gè)抽象類(lèi)Animal,它包含一個(gè)abstract的sound()方法;派生一個(gè)子類(lèi)Dog,實(shí)現(xiàn)父類(lèi)抽象方法sound();創(chuàng)建子類(lèi)Dog對(duì)象,然后調(diào)用它的sound()方法。3目標(biāo)及知識(shí)點(diǎn)定義和使用抽象類(lèi)2final關(guān)鍵字的使用3抽象類(lèi)的概念114抽象類(lèi)如果一個(gè)類(lèi)中沒(méi)有包含足夠的信息來(lái)描繪一個(gè)具體的對(duì)象,這樣的類(lèi)就是抽象類(lèi)定義一個(gè)抽象類(lèi)的格式如下abstractclassAbstractClassName{……}publicabstractclassShap
2、e{publicabstractdoublearea();//抽象方法publicabstractdoublevolume();//抽象方法}當(dāng)一個(gè)類(lèi)被定義成abstract類(lèi)時(shí),表示一個(gè)抽象的概念,它不能用new關(guān)鍵字實(shí)例化對(duì)象,例如上面定義的Shape類(lèi)就是一個(gè)抽象類(lèi),只有被繼承并在子類(lèi)中重寫(xiě)其抽象方法,它才有意義。5【例3-1】定義一個(gè)代表形狀的抽象類(lèi),并派生出圓柱體類(lèi)和長(zhǎng)方體類(lèi),計(jì)算底面半徑為2高為3的圓柱體體積和長(zhǎng)、寬、高分別為3、2、4的長(zhǎng)方體體積。//定義一個(gè)形狀抽象類(lèi)abstractclassShape{d
3、oubleradius,length,width,height;abstractdoublevol();//求體積的抽象方法Shape(doubler,doubleh){//對(duì)半徑和高進(jìn)行初始化的構(gòu)造方法radius=r;height=h;}Shape(doublel,doublew,doubleh){//對(duì)長(zhǎng)寬高進(jìn)行初始化的構(gòu)造方法length=l;width=w;height=h;}}/***圓柱體類(lèi)*/classCircleextendsShape{Circle(doubler,doubleh){super(r,h)
4、;}doublevol(){//重寫(xiě)父類(lèi)抽象方法return(3.1416*radius*radius*height);}}/***長(zhǎng)方體類(lèi)*/classRectangleextendsShape{Rectangle(doublel,doublew,doubleh){super(l,w,h);}doublevol(){//重寫(xiě)父類(lèi)抽象方法return(length*width*height);}}/***主類(lèi)*/publicclassAbstractClassDemo{publicstaticvoidmain(String
5、[]args){Circlec=newCircle(2,3);Rectangler=newRectangle(3,2,4);System.out.println("圓柱體體積="+c.vol());System.out.println("長(zhǎng)方體體積="+r.vol());}}結(jié)果:圓柱體體積=37.6992長(zhǎng)方體體積=24.0【思考】abstract修飾的類(lèi)一定有abstract修飾的方法嗎?Java面向?qū)ο筌浖_(kāi)發(fā)6最終類(lèi)-------final類(lèi)有一種類(lèi)是不能派生出子類(lèi)的,我們叫這種類(lèi)為最終類(lèi)。即我們用final來(lái)修飾
6、的類(lèi)。publicfinalclassTest1{}Java面向?qū)ο筌浖_(kāi)發(fā)7最終類(lèi)-------final類(lèi)如果一個(gè)類(lèi)不允許其子類(lèi)覆蓋某個(gè)方法,則可以把這個(gè)方法聲明為final方法publicfinalvoidf2(){System.out.println("f2");}Java面向?qū)ο筌浖_(kāi)發(fā)8【例3-2】使用final方法的例子classTest1{publicvoidf1(){System.out.println("f1");}//無(wú)法被子類(lèi)覆蓋的方法publicfinalvoidf2(){System.out.p
7、rintln("f2");}}publicclassTest2extendsTest1{publicvoidf1(){System.out.println("Test1父類(lèi)方法f1被覆蓋!");}publicstaticvoidmain(String[]args){Test2t=newTest2();t.f1();t.f2();//調(diào)用從父類(lèi)繼承過(guò)來(lái)的final方法}}結(jié)果:Test1父類(lèi)方法f1被覆蓋!f29任務(wù)實(shí)現(xiàn)123分析類(lèi)及關(guān)系定義抽象類(lèi)AnimalDog類(lèi)利用構(gòu)造方法為type屬性賦值45Dog類(lèi)實(shí)現(xiàn)Animal
8、的sound()main方法進(jìn)行測(cè)試10驅(qū)動(dòng)任務(wù)二有一個(gè)接口AddImp規(guī)定了有求和的方法sum();另外一個(gè)SubImp接口規(guī)定了有減法運(yùn)算的方法subtract();再聲明一個(gè)接口Calculatable繼承于以上兩個(gè)接口。創(chuàng)建Calculator類(lèi)實(shí)現(xiàn)接口Calculatable,并生成對(duì)象測(cè)試該