مشخصات مقاله
آموزش تفاوت 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 abstract void draw();
}
مثال کاربردی:
public interface Drawable{
void draw();
}
public interface Drawable{
void draw();
}
به عبارت ساده، کلاس abstract می تواند از 0 تا 100 درصد از مفهوم abstraction را پیاده سازی کند اما interface به طور کامل و 100 درصد مفهوم نام برده را پیاده سازی می کند.
مثال کاربردی از کلاس abstract و interface در جاوا
در مثال ساده ی زیر دو کامپوننت interface و کلاس abstract به صورت کاربردی پیاده سازی شده اند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | //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(); }} <button></button> |
خروجی:
1 2 3 4 5 | I am a I am b I am c I am d <button></button> |