進階類別(Class) - Java學習筆記

文章推薦指數: 80 %
投票人數:10人

而包含了抽象方法的類別則稱為抽象類別。

範例:. 程式, 輸出. abstract class AbstractTest{ private int x; public abstract void getX(); } 首頁 簡介 Hello,World! 變數類型 運算子 常用變數方法 基本輸入 條件式 迴圈式 模糊化程式設計-方法(Method) 字串(String) 陣列(Array) 類別(Class)-基礎 類別(Class)-進階 例外處理(Exception) 視窗程式設計 視窗程式設計-低階事件 視窗程式設計-語意事件 檔案處理 繪圖與多媒體 網路程式設計 . 類別(Class)-進階 在本章節將會介紹類別的各種進階功能,如繼承、抽象、多形等。

繼承 若要將類別a繼承類別b的成員變數、方法,則需在宣告類別時加上extends: classaextendsb 繼承他類別(父類別)的類別(子類別)將會擁有其所有的成員。

super 當父類別有建構子時,子類別須以super(建構子)給予父類別建構子。

當子類別的成員方法與父類別的成員方法衝突時,須在使用父類別成員方法時於前面加上super.。

範例: classtest1{         privateintx,y;         publictest1(intx,inty){                 this.x=x;                 this.y=y;         }         publicvoidgetValue(){                 System.out.println("x="+x);                 System.out.println("y="+y);         } } classtest2extendstest1{         privateintz;         publictest2(intx,inty,intz){                 super(x,y);                 this.z=z;         }         publicvoidgetValue(){                 super.getValue();                 System.out.println("z="+z);         } } publicclassexample{         publicstaticvoidmain(String[]args){                 test2x=newtest2(3,5,8);                 x.getValue();         } } 靜態(static) 當成員宣告為靜態時,將不受主程式宣告影響,只會有一個。

程式 輸出 classtest{         privatestaticintcount=0;         publictest(){                 count++;         }         publicvoidgetCount(){                 System.out.println("Count:"+count);         } } publicclassexample{         publicstaticvoidmain(String[]args){                 testx=newtest();                 x.getCount();                 testy=newtest();                 y.getCount();                 testz=newtest();                 z.getCount();         } } Count:1Count:2Count:3 final 宣告在類別 當final宣告在類別上時,該類別將無法被繼承。

宣告在函數 當final宣告在函數上時,子類別將無法覆寫。

宣告在變數 當final宣告在變數上時,該變數將被定義為常數,無法再進行修改。

protected 使用方法與public(公開)、private(隱藏)相同,功能為僅供父類別與子類別使用,可說是介於public與private之間。

抽象(Abstract) 定義類別時,可以僅宣告方法名稱而不輸入方法內容,這種方法成為抽象方法, 而包含了抽象方法的類別則稱為抽象類別。

範例: 程式 輸出 abstractclassAbstractTest{         privateintx;         publicabstractvoidgetX(); } classtestextendsAbstractTest{         privateintx;         publictest(intx){                 this.x=x;         }         publicvoidgetX(){                 System.out.println("x="+x);         } } publicclassexample{         publicstaticvoidmain(String[]args){                 testx=newtest(3);                 x.getX();         } } x=3 多形(Polymorphism) 多形(Polymorphism)是物件導向程式設計的重要觀念,可以讓應用程式更容易擴充。

因為不須針對不同資料型態分別建立類別,而是繼承一個基礎類別來建立同名方法, 如此就可以處理不同資料型態,當要新增新的資料型態也變得十分容易。

範例: 程式 abstractclassshape{         protecteddoublevalue;         publicabstractvoidvolume(); } classballextendsshape{         publicball(doubleradius){                 value=(4/3)*Math.PI*Math.pow(radius,3);         }         publicvoidvolume(){                 System.out.println("球體積:"+value);         } } classcubeextendsshape{         publiccube(doublelength,doublewidth,doubleheight){                 value=length*width*height;         }         publicvoidvolume(){                 System.out.println("立方體體積:"+value);         } } classpyramidextendsshape{         publicpyramid(doublesurface,doubleheight){                 value=(surface*height)/3;         }         publicvoidvolume(){                 System.out.println("錐體體積:"+value);         } } publicclassexample{         publicstaticvoidmain(String[]args){                 shapes;                 ballb=newball(5.0);                 cubec=newcube(4.0,8.0,7.0);                 pyramidp=newpyramid(14.0,4.0);                 for(inti=1;i<=3;i++){                         if(i==1)                                 s=b;                         elseif(i==2)                                 s=c;                         else                                 s=p;                         s.volume();         } } 輸出 球體積:392.6990816987241 立方體體積:224.0 角錐體積:18.666666666666668 巢狀類別(NestedClasses) 如同成員變數與成員方法一樣,類別的成員也能是成員類別。

注意:成員類別的成員不得宣告為static。

範例: 程式 輸出 classOuterClass{         privateintouterNum;         publicOuterClass(intouterNum){                 this.outerNum=outerNum;         }         publicvoidprintOuterNum(){                 System.out.println(outerNum);         }         classInnerClass{                 privateintinnerNum;                 publicInnerClass(intinnerNum){                         this.innerNum=innerNum;                 }                 publicvoidprintInnerNum(){                         System.out.println(innerNum);                 } } publicclassexample{         publicstaticvoidmain(String[]args){                 OuterClassouter=newOuterClass(25);                 outer.printOuterNum();                 OuterClass.InnerClassinner=outer.newInnerClass(5);                 inner.printInnerNum();         } } 255 介面(Interface) 介面(Interface)可以建立單一物件多型態以及提供多重繼承的功能。

範例(搭配抽象類別): 程式 abstractclassshape{         publicdoublex,y; } interfaceAreaInterface{         finaldoublePI=Math.PI; } classcircleextendsshapeimplementsAreaInterface{         privatedoubleradius;         publiccircle(doublex,doubley,doubleradius){                 this.x=x;                 this.y=y;                 this.radius=radius;         }         publicvoidarea(){                 System.out.println("x="+x);                 System.out.println("y="+y);                 System.out.println("radius="+radius);                 System.out.println("園面積:"+(PI*radius*radius));         } publicclassexample{         publicstaticvoidmain(String[]args){                 circlec=newcircle(5.0,7.0,8.0);                 c.area();                 System.out.println("PI="+AreaInterface.PI);         } } 輸出 x=5.0 y=7.0 radius=8.0 園面積:201.06192982974676 PI=3.141592653589793 套件(API) 套件為將相關的類別與介面做集合,如此一來不但能達到保護的功能,更能讓使用上更加方便。

範例(多個檔案至於同一package中): 程式 packagepackage_test shape.java publicinterfaceshape{         voidarea(); } circle.java publicclasscircleimplementsshape{         privatedoubleradius;         publiccircle(doubleradius){                 this.radius=radius;         }         publicvoidarea(){                 System.out.println("圓面積:+Math.PI*radius*radius);         } } rectangle.java publicclassrectangleimplementsshape{         privatedoublelength,width;         publiccircle(doublelength,width){                 this.length=length;                 this.width=width;         }         publicvoidarea(){                 System.out.println("矩形面積:+length*width);         } } packageExam.java importpackage_test.circle; importpackage_test.rectangle; publicclasspackageExam{         publicstaticvoidmain(String[]args){                 circlec=newcircle(6.0);                 rectangler=newrectangle(10.0,15.0);                 c.area();                 r.area();         } } 輸出 圓面積:113.09733552923255 矩形面積:150.0



請為這篇文章評分?