Board logo

標題: 抽象類別 [打印本頁]

作者: tonyh    時間: 2019-9-16 19:56     標題: 抽象類別

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

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

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

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



本帖隱藏的內容需要回復才可以瀏覽

作者: 洪翊庭    時間: 2019-9-16 20:32

  1. public class Ch71
  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. }
複製代碼

作者: 趙一鳴    時間: 2019-9-16 20:59

  1. public class SC {

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

  13. }

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

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

  49. class Triangle extends Shape
  50. {
  51.     double x,y;
  52.         Triangle(String n,String c,double x,double y)
  53.         {
  54.                 super(c,n);
  55.                 this.x = x;
  56.                 this.y = y;
  57.         }
  58.        
  59.         void calArea()
  60.         {
  61.                 System.out.println("面積為: "+(x*y/2)+"平方公分" );
  62.         }
  63. }
複製代碼

作者: 戴嘉禾    時間: 2019-9-16 21:02

  1. public class Ch71
  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.    
  24.     void showName()
  25.     {
  26.         System.out.println("物件名稱: "+name);
  27.     }
  28.    
  29.     void showColor()
  30.     {
  31.         System.out.println("顏色為: "+color);
  32.     }
  33.     abstract void calArea();
  34. }

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

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

作者: 黃宇綸    時間: 2019-9-16 21:03

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

作者: 洪翊展    時間: 2019-9-16 21:03

本帖最後由 洪翊展 於 2019-9-16 21:05 編輯
  1. public class Ch71 {
  2.         Square s1=new Square("方形一號","綠色",5);
  3.         s1=showName();
  4.         s1=showColor();
  5.         s1=calArea();
  6.         Tri t1=new Tri("三角形一號","白色",5,7);
  7.         t1=showName();
  8.         t1=showColor();
  9.         t1=calArea();
  10.        

  11. }
  12. abstract class Shape{
  13.         String name;
  14.         String color;
  15.         Shape(String n,String c)
  16.         {
  17.                 name=n;
  18.                 color=c;
  19.         }
  20.         void showName()
  21.         {
  22.                 System.out.println("物件名稱 "+name);
  23.         }
  24.         void showColor()
  25.         {
  26.                 System.out.println("顏色 "+color);
  27.         }
  28.         abstract void calArea();
  29. }
  30. class Square extends Shape{
  31.        
  32.         int j;
  33.         Square(String n,String c,int j){
  34.           super(n,c);

  35.                 this.j=j;
  36.           
  37.         }
  38.         void calArea(){
  39.                 System.out.println("面積為 "+(j*j)+"平方公分");
  40.         }
  41.        
  42.        
  43. }
  44. class Tri extends Shape{
  45.        
  46.         double x,y;
  47.         Tri(String n,String c,double x,double y){
  48.           super(n,c);
  49.         this.x=x;
  50.                 this.y=y;
  51.           
  52.         }
  53.         void calArea(){
  54.                 System.out.println("面積為 "+(x*y)/2+"平方公分");
  55.         }
  56.        
  57.        
  58. }
複製代碼

作者: 黃宇瑄    時間: 2019-9-16 21:05

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

作者: 李沛昂    時間: 2019-9-16 21:09

  1. public class Ch00 {

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


  14. abstract class Shape{
  15.         String name;
  16.         String color;
  17.         Shape(String n,String c)
  18.         {
  19.                 name=n;
  20.                 color=c;
  21.         }
  22.         void showName()
  23.         {
  24.                 System.out.println("物件名稱: "+name);
  25.         }
  26.         void showColor()
  27.         {
  28.                 System.out.println("顏色: "+color);
  29.         }
  30.         abstract void calArea();
  31. }
  32. class Square extends Shape{
  33.         int x;
  34.         Square(String n,String c,int x)
  35.         {
  36.                 super(n,c);
  37.                 this.x=x;
  38.         }
  39.         @Override
  40.         void calArea() {
  41.                 System.out.println("面積: "+(x*x)+"平方公分");
  42.         }
  43. }
  44. class Tri extends Shape{
  45.         double x,y;
  46.         Tri(String n,String c,double x,double y){
  47.                 super(n,c);
  48.                 this.x=x;
  49.                 this.y=y;
  50.         }
  51.         @Override
  52.         void calArea() {
  53.                 System.out.println("面積: "+(x*y)/2+"平方公分");
  54.         }
  55. }
複製代碼

作者: 鄭楀諺    時間: 2019-9-28 14:55

  1. public class Morris {

  2.         public static void main(String[] args) {
  3.                 // TODO 自動產生的方法 Stub
  4.                 square sq = new square("方形一號", "綠色", 5);
  5.                 sq.showName();
  6.                 sq.showColor();
  7.                 sq.calArea();
  8.                 triangle tri = new triangle("三角形一號", "粉紅色", 7, 5);
  9.                 tri.showName();
  10.                 tri.showColor();
  11.                 tri.calArea();
  12.         }

  13. }

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

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

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

作者: may    時間: 2020-2-9 15:59

  1. public class Ch71        //主類別 Ch71
  2. {
  3.     public static void main(String[] args) 主方法
  4.     {
  5.         Square sq=new Square("方形1號","綠色",5);   //用Square 建構子產生Square 物件sq
  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     //抽象類別 Shape
  16. {
  17.     String name, color;    //Shape 的屬性
  18.     Shape(String name, String color)  //Shape的建構子
  19.     {
  20.         this.name=name;   //本函數的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(); //抽象方法 calArea()
  32. }

  33. class Square extends Shape  //Square 類別繼承自Share 類別
  34. {
  35.     int x;    //  Square 類別 增加一個屬性(元素)   
  36.     Square(String name, String color, int x) //Square 類別的建構子
  37.     {
  38.         super(name,color);  //name,color 屬性直接繼承自父類別
  39.         this.x=x;  //本函數的參數 x 賦值給 Square.x
  40.     }  
  41.     void calArea()    //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. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2