資源描述:
《抽象類與接口Java》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第6章抽象類與接口講師:2009-06-08目標(biāo)當(dāng)完成本章后,你應(yīng)該能夠:理解抽象方法理解抽象類從抽象類繼承理解并使用接口實(shí)現(xiàn)接口從接口繼承抽象類從形狀開始抽象方法抽象類從形狀開始要開發(fā)一個圖形系統(tǒng)首先要定義相關(guān)的圖形類主要有:三角形平行四邊形矩形正方形……父類根據(jù)繼承的知識以及形狀之間的關(guān)系設(shè)計了所有形狀類的父類類Shape該類的方法在繼承時需要被覆蓋Shape.java父類Shape未定義成員變量成員方法如下:publicShape();publicdoublegetPerimeter();publ
2、icdoublegetArea();publicvoiddraw();周長和面積這是任何形狀都有的屬性返回類型是double由于Shape是所有形狀的父類并不是具體的形狀那么這兩個方法的方法體能否為空呢?答案是不能為空因?yàn)榉椒ǖ姆祷仡愋褪莇ouble這兩個方法必須返回一個double類型的值否則產(chǎn)生編譯錯誤,不能通過編譯編譯錯誤把兩句return0.0;注釋后重新編譯程序srcShape.java:9:缺少返回語句}^srcShape.java:13:缺少返回語句}^2錯誤子類Triangle設(shè)計并
3、實(shí)現(xiàn)子類三角形TriangleTriangle.java成員:privatedoublea;privatedoubleb;privatedoublec;publicTriangle();publicTriangle(doublea,doubleb,doublec);publicdoublegetPerimeter();publicdoublegetArea();publicvoiddraw();子類parallelogram設(shè)計并實(shí)現(xiàn)子類平行四邊形parallelogramParallelogram.j
4、ava成員:privatedoublea;privatedoubleb;privatedoubletheta;publicParallelogram();publicParallelogram(doublea,doubleb,doubletheta);publicdoublegetA();publicdoublegetB();publicdoublegetPerimeter();publicdoublegetArea();publicvoiddraw();Math.sin(theta)小問題但影響最終計
5、算結(jié)果經(jīng)常使用角度但該方法使用的是弧度角度轉(zhuǎn)換為弧度子類Rectangle設(shè)計并實(shí)現(xiàn)子類矩形rectangleRectangle.java該類從Parallelogram而非Shape進(jìn)行繼承成員:publicRectangle();publicRectangle(doublea,doubleb);publicvoiddraw();子類Rectangle構(gòu)造器的編寫通過super來調(diào)用父類的構(gòu)造器角度的賦值計算周長和面積通過構(gòu)造器已經(jīng)完成了成員變量的賦值因此該類不需要覆蓋父類的這兩個方法子類Square
6、設(shè)計并實(shí)現(xiàn)子類正方形squareSquare.java該類從Rectangle進(jìn)行繼承成員:publicSquare();publicSquare(doublea);publicvoiddraw();子類Square構(gòu)造器的寫法與其父類Rectangle類似該類不需要覆蓋計算周長和面積的方法類圖可能的副作用成員的繼承包括成員變量和成員方法父類的修改對于子類的影響子類對于父類有較強(qiáng)的依賴性耦合,coupling原則:低耦合,高內(nèi)聚分析父類Shape兩個方法的方法體沒有任何實(shí)際意義但是為了編譯能夠通過不能刪
7、去返回語句可是返回的值又沒有任何實(shí)際意義兩難境地Whatcanwedo?解決辦法可以告訴編譯器壓根兒就沒想實(shí)現(xiàn)這兩個方法因?yàn)榧词苟x了方法體也沒有任何實(shí)際用處那還不如根本就別定義方法體不想實(shí)現(xiàn)的方法只有方法頭部,沒有方法體抽象方法抽象方法不需要實(shí)現(xiàn)的方法之后方法的頭部沒有方法體用分號;代替正常的一對大括號{}語法:publicdoublegetPerimeter();publicdoublegetArea();重新編譯Shape.java編譯錯誤srccnpetershapeShape.java
8、:9:缺少方法主體,或聲明抽象publicdoublegetPerimeter();^srccnpetershapeShape.java:11:缺少方法主體,或聲明抽象publicdoublegetArea();^2錯誤抽象方法必須把方法聲明為抽象的使用Java語言的關(guān)鍵字abstract改成如下形式:publicabstractdoublegetPerimeter();publicabstractdoublegetArea();p