Board logo

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

作者: tonyh    時間: 2021-7-9 20:21     標題: 抽象類別

本帖最後由 tonyh 於 2021-7-9 20:23 編輯

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

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

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

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

  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. }
複製代碼

作者: 陳宥穎    時間: 2021-7-9 21:03

  1. public class Ch08 {
  2.         public static void main(String[] args)
  3.         {
  4.                 Square sq=new Square("方形1","綠色",5);
  5.                 sq.showName();
  6.                 sq.showColor();
  7.                 sq.calArea();
  8.                 Tri tr=new Tri("三角形1","粉紅色",8,12);
  9.                 tr.showName();
  10.                 tr.showColor();
  11.                 tr.calArea();
  12.         }   
  13. }
  14. abstract class Shape
  15. {
  16.         String n, c;
  17.         Shape(String name, String color)
  18.         {
  19.                 n=name;
  20.                 c=color;
  21.         }
  22.         void showName()
  23.         {
  24.                 System.out.println("物件名稱: "+n);
  25.         }
  26.         void showColor()
  27.         {
  28.                 System.out.println("顏色為: "+c);
  29.         }
  30.         abstract void calArea();
  31. }

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

作者: 劉愷鈞    時間: 2021-7-9 21:04

  1. public class Ch02 {
  2.         public static void main(String[] args) {
  3.                 square s=new square("方形1號","綠色",5);
  4.                 s.showname();
  5.                 s.showcolor();
  6.                 s.calArea();
  7.                 tri t=new tri("三角形1號","粉紅色",7,5);
  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 square extends shape
  32. {
  33.         int x;
  34.         square(String name,String color, int x)
  35.         {
  36.                 super(name, color);
  37.                 this.x=x;
  38.         }
  39.         void calArea()
  40.         {
  41.                 System.out.println("面積為: "+x*x+"平方公分");     
  42.         }
  43. }
  44. class tri extends shape
  45. {
  46.         double x, y;
  47.         tri(String name,String color,double x,double y)
  48.         {
  49.                 super(name,color);
  50.                 this.x=x;
  51.                 this.y=y;
  52.         }  
  53.         void calArea()
  54.         {
  55.                 System.out.println("面積為: "+(x*y/2)+"平方公分");     
  56.         }
  57. }
複製代碼

作者: 董宸佑    時間: 2021-7-9 21:24

  1. public class Ch01 {

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

  13. abstract class Shape{
  14.         String color, name;

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

  27. class Square extends Shape{
  28.         int x;
  29.     Square(String n, String c, int x) {
  30.             super(n, c);
  31.             this.x=x;
  32.     }
  33.     void calArea(){
  34.             System.out.println("面積為: "+x*x+"平方公分");
  35.     }
  36. }

  37. class Tri extends Shape{
  38.         double x, y;
  39.         Tri(String n, String c, double x, double y) {
  40.                 super(n, c);
  41.                 this.x=x;
  42.                 this.y=y;
  43.         }
  44.         void calArea(){
  45.                 System.out.println("面積為: "+(x*y/2)+"平方公分");
  46.         }
  47. }
複製代碼

作者: 黃柏叡    時間: 2021-7-11 14:37

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

作者: 孫嘉駿    時間: 2021-7-16 18:58

  1. public class Ch04 {

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

  11.         }

  12. }
  13. abstract class Shape
  14. {
  15.         String name, color;
  16.         Shape(String name, String color)
  17.         {
  18.                 this.name=name;
  19.                 this.color=color;
  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 Square extends Shape
  32. {
  33.         int x;
  34.         Square(String name, String color, int x)
  35.         {
  36.                 super(name,color);
  37.                 this.x=x;
  38.         }  
  39.         void calArea()
  40.         {
  41.                 System.out.println("面積為: "+x*x+"平方公分");     
  42.         }
  43. }
  44. class Tri extends Shape
  45. {
  46.         double x, y;
  47.         Tri(String name, String color, double x, double y)
  48.         {
  49.                 super(name,color);
  50.                 this.x=x;
  51.                 this.y=y;
  52.         }  
  53.         void calArea()
  54.         {
  55.                 System.out.println("面積為: "+(x*y/2)+"平方公分");     
  56.         }
  57. }
複製代碼

作者: 李宇澤    時間: 2021-7-16 19:03

本帖最後由 李宇澤 於 2021-7-16 19:23 編輯
  1. public class Ch63
  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. }
複製代碼

作者: 林政瑜    時間: 2021-7-16 19:07

  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. }
複製代碼

作者: 黃宥華    時間: 2021-7-16 19:23

  1. public class Ch03
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         Square sq=new Square("方形一號","綠色",5);
  6.         sq.showName();
  7.         sq.showColor();
  8.         sq.calArea();
  9.         Tri tr=new Tri("三角形一號","粉紅色",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. }
複製代碼

作者: 沈子晏    時間: 2021-7-16 19:35

  1. public class Ch071601 {
  2.         public static void main(String[] args) {
  3.                 Square sq=new Square("方形1號", "綠色", 5);
  4.                 sq.showName();
  5.                 sq.showColor();
  6.                 sq.calArea();
  7.                 Tri tr=new Tri("三角形1號","粉紅色",7,5);
  8.         tr.showName();
  9.         tr.showColor();
  10.         tr.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.        
  22.         void showName()
  23.         {
  24.                 System.out.println("物件名稱: "+name);
  25.         }
  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. }
複製代碼

作者: 蔡忻霓    時間: 2021-7-16 19:36

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

作者: 夏子涵    時間: 2021-7-16 19:40

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





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