کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش تفاوت interface با کلاس abstract در Java

آموزش Java – تفاوت interface با کلاس abstract در جاوا

کلاس abstract و interface هر دو برای پیاده سازی مفهوم انتزاع/abstraction در برنامه نویسی بکار می روند که می توانید در بدنه ی آن ها متدهای abstract (بدون بدنه و پیاده سازی) را تعریف کنید. کلاس abstract و interface هر دو غیر قابل نمونه سازی هستند و به عبارت ساده تر نمی توان مانند کلاس از روی آن ها آّبجکت ساخت.

با این حال تفاوت های متعددی بین کلاس abstract و interface وجود دارد که در جدول زیر به آن ها اشاره می کنیم:

ردیف
کلاس abstract یا انتزاعی
Interface و الگوی پیاده سازی متدها
1
کلاس انتزاعی می تواند داخل بدنه ی خود چندین متد abstract و غیر abstract (با بدنه و پیاده سازی) داشته باشد.
Interface منحصرا می تواند متدهای abstract و بدون بدنه داشته باشد. از ویرایش 8 پلت فرم جاوا، interface می تواند در بدنه ی خود متدهای static و default نیز داشته باشد.
2
کلاس انتزاعی از قابلیت وراثت چندگانه پشتیبانی نمی کند.
در جاوا می توان به واسطه ی interface وراثت چندگانه را پیاده سازی کرد.
3
کلاس انتزاعی می تواند متغیرهای final، غیر final و قابل ویرایش، static (مشترک بین تمامی نمونه ها و ثابت) و غیر static در بدنه خود جای دهد.
Interface فقط می تواند متغیرهای static و final در بدنه ی خود داشته باشد.
4
کلاس انتزاعی می تواند interface را داخل خود پیاده سازی کند.
Interface نمی تواند کلاس انتزاعی را پیاده سازی کند.
5
برای تعریف کلاس انتزاعی لازم است از کلیدواژه ی abstract استفاده شود.
برای تعریف interface باید از کلیدواژه ی interface استفاده شود.
6
مثال کاربردی: public abstract class Shape{
public abstract void draw();
}
مثال کاربردی:
public interface Drawable{
void draw();
}

به عبارت ساده، کلاس abstract می تواند از 0 تا 100 درصد از مفهوم abstraction را پیاده سازی کند اما interface به طور کامل و 100 درصد مفهوم نام برده را پیاده سازی می کند.

مثال کاربردی از کلاس abstract و interface در جاوا

در مثال ساده ی زیر دو کامپوننت interface و کلاس abstract به صورت کاربردی پیاده سازی شده اند.

//Creating interface that has 4 methods  
interface A{  
void a();//bydefault, public and abstract  
void b();  
void c();  
void d();  
}  
//Creating abstract class that provides the implementation of one method of A interface  
abstract class B implements A{  
public void c(){System.out.println("I am C");}  
}  
//Creating subclass of abstract class, now we need to provide the implementation of rest of the methods  
class M extends B{  
public void a(){System.out.println("I am a");}  
public void b(){System.out.println("I am b");}  
public void d(){System.out.println("I am d");}  
}  
//Creating a test class that calls the methods of A interface  
class Test5{  
public static void main(String args[]){  
A a=new M();  
a.a();  
a.b();  
a.c();  
a.d();  
}}  

خروجی:

I am a
I am b
I am c
I am d
1396/07/03 12138 2098
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...