返回列表 發帖

抽象類別

本帖最後由 tonyh 於 2015-5-30 15:10 編輯

在設計Java程式時,當程式設計者希望基礎類別只是用來被衍生類別繼承,而不希望真正產生一個基礎類別的物件,此時就可以將基礎類別宣告成抽象類別。

所謂抽象類別(Abstract Class)是指無法建立物件,只能被衍生類別繼承的一種特殊類別,而在抽象類別裡可以宣告抽象方法(Abstract Method),抽象方法是一個尚未完全實作的方法,表示一個方法原型,必須在衍生類別中撰寫方法的實作內容。

關於抽象類別的幾個重點歸納如下:

1. 包含抽象方法的類別一定要宣告為抽象類別。
2. 抽象類別有建構子,但無法產生物件實體。
3. 抽象類別可同時包含抽象方法與一般方法,也可以完全沒有抽象方法。
4. 抽象類別一定要被繼承,而抽象方法一定要被改寫。
5. 若衍生類別中有任何一個抽象方法沒有被實作,則必須將該類別也宣告為抽象類別,以便強迫更下層的類別在繼承它後,實作剩餘沒有被實作的抽象方法。


本帖隱藏的內容需要回復才可以瀏覽
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

  1. public class Ch77
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         Square sq=new Square("方形1號","綠色",5);
  6.         sq.showName();
  7.         sq.showColor();
  8.         sq.calArea();
  9.         Tri tr=new Tri("三角形1號","粉紅色",7,5);
  10.         tr.showName();
  11.         tr.showColor();
  12.         tr.calArea();
  13.     }   
  14. }

  15. abstract class Shape
  16. {
  17.     String name, color;
  18.     Shape(String name, String color)
  19.     {
  20.         this.name=name;
  21.         this.color=color;
  22.     }
  23.     void showName()
  24.     {
  25.         System.out.println("物件名稱: "+name);
  26.     }
  27.     void showColor()
  28.     {
  29.         System.out.println("顏色為: "+color);
  30.     }
  31.     abstract void calArea();
  32. }

  33. class Square extends Shape
  34. {
  35.     int x;
  36.     Square(String name, String color, int x)
  37.     {
  38.         super(name,color);
  39.         this.x=x;
  40.     }  
  41.     void calArea()
  42.     {
  43.         System.out.println("面積為: "+x*x+"平方公分");     
  44.     }
  45. }

  46. class Tri extends Shape
  47. {
  48.     double x, y;
  49.     Tri(String name, String color, double x, double y)
  50.     {
  51.         super(name,color);
  52.         this.x=x;
  53.         this.y=y;
  54.     }  
  55.     void calArea()
  56.     {
  57.         System.out.println("面積為: "+(x*y/2)+"平方公分");     
  58.     }
  59. }
複製代碼

TOP

  1. package ch76;
  2. public class ch76
  3. {
  4.         public static void main(String args[])
  5.         {
  6.             Square sq=new Square("方形體","綠色",5);
  7.             sq.showName();
  8.             sq.showColor();
  9.         }
  10. }
  11. abstract class Shape
  12. {
  13.     String name,color;
  14.     Shape(String name,String color)
  15.     {
  16.             this.name=name;
  17.             this.color=color;
  18.     }
  19.      void showName()
  20.     {
  21.             System.out.println("物件名稱為"+name);
  22.     }
  23.      void showColor()
  24.     {
  25.             System.out.println("物件顏色為"+color);
  26.     }
  27.     abstract void calArea();
  28. }
  29. class Square extends Shape
  30. {
  31.         int x;
  32.         Square(String name,String color,int x)
  33.         {
  34.         super(name,color);
  35.         this.x=x;
  36.         }
  37.     void calArea()
  38.     {
  39.             System.out.println("面積為:"+x*x);
  40.     }
  41. }
  42. class Tri extends Shape
  43. {
  44.         double x,y;
  45.         Tri(String name,String color,double x,double y)
  46.         {
  47.         super(name,color);
  48.         this.x=x;
  49.         this.y=y;
  50.         }
  51.                                          void calArea()
  52.     {
  53.             System.out.println("面積為:"+x*y/2);
  54.     }
  55. }
複製代碼

TOP

  1. package ch76;
  2. public class ch76
  3. {
  4.         public static void main(String args[])
  5.         {
  6.             Square sq=new Square("方形體","綠色",5);
  7.             sq.showName();
  8.             sq.showColor();
  9.         }
  10. }
  11. abstract class Shape
  12. {
  13.     String name,color;
  14.     Shape(String name,String color)
  15.     {
  16.             this.name=name;
  17.             this.color=color;
  18.     }
  19.     void showName()
  20.     {
  21.             System.out.println("物件名稱為"+name);
  22.     }
  23.     void showColor()
  24.     {
  25.             System.out.println("物件顏色為"+color);
  26.     }
  27.     abstract void calArea();
  28. }
  29. class Square extends Shape
  30. {
  31.         int x;
  32.         Square(String name,String color,int x)
  33.         {
  34.         super(name,color);
  35.         this.x=x;
  36.         }
  37.     void calArea()
  38.     {
  39.             System.out.println("面積為:"+x*x);
  40.     }
  41. }
  42. class Tri extends Shape
  43. {
  44.         double x,y;
  45.         Tri(String name,String color,double x,double y)
  46.         {
  47.         super(name,color);
  48.         this.x=x;
  49.         this.y=y;
  50.         }
  51.     void calArea()
  52.     {
  53.             System.out.println("面積為:"+x*y/2);
  54.     }
  55. }
複製代碼

TOP

  1. public class Ch77
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         Square sq=new Square("方形1號","綠色",5);
  6.         sq.showName();
  7.         sq.showColor();
  8.         sq.calArea();
  9.         Tri tr=new Tri("三角形1號","粉紅色",7,5);
  10.         tr.showName();
  11.         tr.showColor();
  12.         tr.calArea();
  13.     }   
  14. }

  15. abstract class Shape
  16. {
  17.     String name, color;
  18.     Shape(String name, String color)
  19.     {
  20.         this.name=name;
  21.         this.color=color;
  22.     }
  23.     void showName()
  24.     {
  25.         System.out.println("物件名稱: "+name);
  26.     }
  27.     void showColor()
  28.     {
  29.         System.out.println("顏色為: "+color);
  30.     }
  31.     abstract void calArea();
  32. }

  33. class Square extends Shape
  34. {
  35.     int x;
  36.     Square(String name, String color, int x)
  37.     {
  38.         super(name,color);
  39.         this.x=x;
  40.     }  
  41.     void calArea()
  42.     {
  43.         System.out.println("面積為: "+x*x+"平方公分");     
  44.     }
  45. }

  46. class Tri extends Shape
  47. {
  48.     double x, y;
  49.     Tri(String name, String color, double x, double y)
  50.     {
  51.         super(name,color);
  52.         this.x=x;
  53.         this.y=y;
  54.     }  
  55.     void calArea()
  56.     {
  57.         System.out.println("面積為: "+(x*y/2)+"平方公分");     
  58.     }
  59. }
複製代碼

TOP

返回列表