کلاسهای انتزاعی (Abstract Class)

کلاسهای مجرد (abstract) کلاسهایی هستند که کلاس پایه سایر کلاسها هستند.این نوع کلاسها می توانند مانند کلاسهای عادی دارای سازنده باشند. شما نمی توانید از کلاسهای انتزاعی نمونه ایجاد کنید چون که هدف اصلی از به کار بردن کلاسهای انتزاعی استفاده از آنها به عنوان کلاس پایه برای کلاسهای مشتق است. برای تعریف یک کلاس انتزاعی از کلمه کلیدی abstract استفاده می شود. به مثال زیر در مورد استفاده از کلاسهای انتزاعی توجه کنید :

   1: package myfirstprogram;
   2: 
   3: abstract class Base
   4: {
   5:     protected int number;
   6:     protected String name;
   7: 
   8:     public abstract void ShowMessage();
   9: 
  10:     public Base(int number, String name)
  11:     {
  12:         this.number = number;
  13:         this.name = name;
  14:     }
  15: }
  16: 
  17: class Derived extends Base
  18: {
  19:     @Override
  20:     public void ShowMessage()
  21:     {
  22:          System.out.println("Hello World!");
  23:     }
  24: 
  25:     public Derived(int number, String name)        
  26:     {
  27:         super(number, name);
  28:     } 
  29: }

در داخل کلاس انتزاعی دو فیلد محافظت شده (protected) تعریف کرده ایم (خطوط 6-5) که می خواهیم آنها را توسط سازنده کلاس مقدار دهی کنیم (خطوط 14-10). یک متد هم را به صورت انتزاعی (abstract) تعریف کرده ایم (خط 8). به این نکته توجه کنید که برای تعریف این متد کلمه کلیدی abstract را به کار برده ایم.

این متد باید به وسیله کلاسهایی که از این کلاس ارث می برند override یا به صورت دیگر پیاده سازی شود، ولی از آن جاییکه به صورت abstract تعریف شده است فاقد بدنه می باشد. می بینید که کلاسهای abstract می توانند شامل property های معمولی مانند property، Name مثال بالا باشند. کلاسهای abstract حداقل باید یک عضو abstract داشته باشند.

یک کلاس دیگر تعریف می کنید که از کلاس Base ارث بری کند. سپس در خطوط 23-19 متد abstract را به صورت دیگر پیاده سازی می کنیم (override کنیم). همچنین یک سازنده تعریف می کنیم(خطوط 28-25) و با استفاده از کلمه کلیدی super مقادیر پارامترها را به سازنده پایه ارسال می کنیم. نمی توان از یک کلاس abstract نمونه ایجاد کرد ولی از کلاس هایی که از این نوع کلاس ها مشتق می شوند، می توان نمونه ایجاد کرد.