تفاوت Abstract Class با Interface
سه شنبه 18 فروردین 1394در این مقاله تفاوت بین Abstract Class و Interface را در برنامه نویسی و تئوری بیان می کنیم
احتمالاً تفاوت بین Class و Interface یکی از رایجترین سوالات در دنیای Net. میباشد .از نظر تئوری 5 تفاوت اصلی بین Abstract Class و Interface وجود دارد :
1 - کلاس می تواند تعدادی از Interface ها را اجرا کند اما زیر کلاس (Subclass) فقط میتواند یک کلاس را اجرا کند
2 - کلاس می تواند هیچ متدی را در بر نگیرد(Concrete Method) در صورتی که در Interface باید شامل کلاس باشد .
3 - یک کلاس می تواند در هر زمانی فراخوانی شود در صورتی که در interface این عمل مقدور نیست .
به مثال ذکر شده توجه فرمایید :
interface TestInterface { int x = 4; // در قسمت بالا interface را مقدار دهی میکنیم void getMethod(); string getName(); } abstract class TestAbstractClass { int i = 4; int k = 3; public abstract void getClassName(); }
با اجرای دستور بالا ما با پیغام خطا مواجه میشویم . بنابراین برای اجرای درست باید یک قسمت را حذف کنیم و کد بالا را مطابق زیر اصلاح کنیم :
interface TestInterface { void getMethod(); string getName(); } abstract class TestAbstractClass { int i = 4; int k = 3; public abstract void getClassName(); }
کد بالا از آنجایی که هیچ مقداردهی در interface وجود ندارد به درستی کامپایل میشود.
4 - Abstract Class می تواند شامل Cusntructor باشد در حالی که Interface این امکان را ندارد .
به مثال زیر توجه فرمایید :
interface TestInterface { // ایجاد constructor public TestInterface() { } void getMethod(); string getName(); } abstract class TestAbstractClass { public TestAbstractClass() { } int i = 4; int k = 3; public abstract void getClassName(); }
با اجرای دستور بالا نیز با پیغام خطا مواجه میشوید .زیرا Interface نمی تواند شامل constructor باشد . بنابراین ما باید قسمت ایجاد constructor را حذف کنیم . مانند دستور زیر :
interface TestInterface { void getMethod(); string getName(); } abstract class TestAbstractClass { public TestAbstractClass() { } int i = 4; int k = 3; public abstract void getClassName(); }
5 - کلاس اجازه سطح دسترسی برای تمامی اعضای تعریف شده دارد در حالی که در Interface ما اجازه تعریف سطح دسترسی نداریم .
ما میتوانیم access specifier برای اعضای public تعریف کنیم .
public interface TestInterface { void getMethod(); string getName(); }
در interface اجازه تعریف access specifier نداریم .
interface TestInterface { public void getMethod(); public string getName(); }
کد بالا نیز پیغام خطا می دهد .
اما بهترین راه برای تعریف Interface در جلوگیری از access specifier در interface برای اعظا interface به صورت زیر میباشد :
interface Test { void getMethod(); string getName(); }
- C#.net
- 2k بازدید
- 3 تشکر