تفاوت کلیدی – وراثت در مقابل رابط در جاوا
جاوا یک زبان برنامه نویسی است که توسط Sun Microsystems توسعه یافته است. جاوا می تواند برای توسعه برنامه های کاربردی مختلف استفاده شود. این یک زبان چند پارادایم است که از شی گرا، ساختاریافته و غیره پشتیبانی می کند. مزیت اصلی جاوا این است که از برنامه نویسی شی گرا (OOP) پشتیبانی می کند. برنامه نویس می تواند کلاس ها و اشیاء ایجاد کند. در OOP چهار ستون وجود دارد. آنها وراثت، چندشکلی، انتزاع و کپسولاسیون هستند. وراثت و رابط ها به OOP مربوط می شوند. تفاوت اصلی بین وراثت و رابط در این است که وراثت به دست آوردن کلاس های جدید از کلاس های موجود است و یک رابط برای پیاده سازی کلاس های انتزاعی و وراثت چندگانه است.
وراثت در جاوا چیست؟
وراثت می تواند به قابلیت استفاده مجدد کد دست یابد. وراثت به استفاده مجدد از ویژگی ها و متدهای یک کلاس موجود کمک می کند. مکانیسم استخراج کلاس جدید با استفاده از کلاس قدیمی وراثت نامیده می شود. کلاس قدیمی به عنوان کلاس پدر یا کلاس فوق العاده شناخته می شود. کلاس مشتق شده کلاس فرزند یا زیر کلاس نامیده می شود.
سینتکس وراثت جاوا به شرح زیر است.
class subclass_name گسترش superclass_name {
اعلان متغیر؛
اعلام روش؛
}
مفهوم وراثترا می توان با استفاده از مثال زیر توضیح داد. فرض کنید کلاسی به نام A به صورت زیر وجود دارد.
کلاس عمومی A{
public void sum(){
System.out.println("Sum");
}
}
اگر بخواهیم یک متد جدید را بدون تغییر کلاس موجود اضافه کنیم، می توانیم این کار را به صورت زیر انجام دهیم.
کلاس عمومی B{
sublic void sub(){
System.out.println("Sub");
}
}
برنامهنویس میتواند از وراثت برای استفاده از کلاس A sum(). استفاده کند
کلاس عمومی B کلاس A را گسترش می دهد{
sublic void sub(){
System.out.println("Sub");
}
}
در تابع main می توان یک شی از B ایجاد کرد و sub() را فراخوانی کرد که متعلق به کلاس B و sum() است که متعلق به کلاس A با استفاده از وراثت است.
public static void main (string args){
B obj=new B();
obj.sub();
obj.sum();
}
انواع مختلفی از ارث وجود دارد. آنها وراثت تک، وراثت چندگانه، وراثت چند سطحی و وراثت سلسله مراتبی هستند. در وراثت تک، یک کلاس پایه و یک کلاس مشتق شده وجود دارد.در وراثت چند سطحی، سه کلاس وجود دارد، کلاس پایه، کلاس متوسط و کلاس مشتق شده. کلاس متوسط از کلاس پایه و کلاس مشتق شده از کلاس متوسط ارث می برد. در وراثت سلسله مراتبی، یک کلاس پایه و چندین کلاس مشتق شده وجود دارد. نوع خاصی وجود دارد که به عنوان وراثت ترکیبی شناخته می شود. این ترکیبی از دو یا چند نوع ارث است.
شکل 01: وراثت
در وراثت چندگانه، تعداد زیادی کلاس پایه و یک کلاس مشتق شده وجود دارد. فرض کنید کلاس A و B کلاس های پایه هستند. کلاس C کلاس مشتق شده است. اگر هر دو کلاس A و B متد یکسانی داشته باشند و برنامه نویس آن متد را از کلاس مشتق شده فراخوانی کند، مشکل ابهام ایجاد می کند. ارث بردن دو کلاس می تواند باعث خطای زمان کامپایل شود.بنابراین، وراثت چندگانه در جاوا پشتیبانی نمی شود. می توان از یک رابط برای غلبه بر آن مشکل استفاده کرد.
اینترفیس در جاوا چیست؟
Abstraction فرآیندی است برای پنهان کردن جزئیات پیاده سازی و نمایش تنها عملکردها به کاربر. انتزاع را می توان با استفاده از کلاس های Abstract یا Interfaces به دست آورد. روش انتزاعی روشی بدون پیاده سازی است. کلاسی با حداقل یک متد انتزاعی یک کلاس انتزاعی است. نمونه یک کلاس انتزاعی به شرح زیر است.
کلاس انتزاعی A{
abstract void sum();
}
فرض کنید که دو کلاس انتزاعی به عنوان A و B وجود دارد. برای پیاده سازی متدهای انتزاعی A و B، یک کلاس C جدید ایجاد می شود. سپس کلاس C باید A و B را گسترش دهد، اما وراثت چندگانه در جاوا پشتیبانی نمی شود. بنابراین، باید از رابط استفاده کنید. می توان از رابط ها برای اعلام متدها استفاده کرد، اما نمی توان متدها را تعریف کرد. امکان ایجاد یک شی با استفاده از رابط ها وجود ندارد.کلاس C باید همه متدها را در رابط A و B پیاده سازی کند.
رابط A{
void sum();
}
رابط B{
void sub();
}
کلاس C A، B را اجرا می کند{
public void sum(){
System.out.println("Summation");
}
sublic void sub(){
System.out.println("تفریق");
}
}
اکنون در برنامه اصلی امکان ایجاد یک شی از C و فراخوانی هر دو متد وجود دارد.
public static void main (string args) {
C obj=new C();
obj.sum();
obj.sub();
}
بنابراین، رابط ها می توانند برای پیاده سازی وراثت چندگانه استفاده کنند.
کاربرد دیگر رابط ها این است که امنیت را فراهم می کند. به کد زیر مراجعه کنید.
رابط A {
جمع باطل ();
}
کلاس B A را اجرا می کند {
جمع باطل عمومی () {
System.out.println("Summation");
}
ضرب خلأ عمومی () {
System.out.println("ضرب");
}
}
هنگام ایجاد یک شی از B، می توان هر دو روش را sum () و ضرب () فراخوانی کرد. اگر برنامه نویس بخواهد با استفاده از تابع ضرب () محدود کند، به صورت زیر امکان پذیر است.
public static void main (string args){
A obj=new B();
obj.sum();
}
A obj=new B(); یک شی ایجاد خواهد کرد. این از نوع A است و حافظه به صورت B تخصیص داده می شود. فراخوانی sum() امکان پذیر است اما نمی تواند ضرب () را اجرا کند. این محدودیت با استفاده از رابط ها انجام می شود.
شباهت های بین وراثت و رابط در جاوا چیست؟
- هر دو مفهوم مربوط به برنامه نویسی شی گرا هستند
- هر دو نشان دهنده رابطه IS-A هستند.
تفاوت بین وراثت و رابط در جاوا چیست؟
وراثت در مقابل رابط در جاوا |
|
وراثت یک مفهوم OOP برای استخراج کلاس های جدید از کلاس های موجود است. | اینترفیس مکانیزمی در OOP برای پیاده سازی انتزاع و وراثت چندگانه است. |
استفاده | |
وراثت قابلیت استفاده مجدد کد را فراهم می کند. | رابط ها انتزاع و وراثت چندگانه را فراهم می کنند. |
خلاصه - وراثت در مقابل رابط در جاوا
جاوا یک زبان برنامه نویسی چند پارادایم است که از برنامه نویسی شی گرا پشتیبانی می کند.وراثت و رابط ها با برنامه نویسی شی گرا مرتبط هستند. تفاوت بین وراثت و اینترفیس در این است که وراثت برای استخراج کلاسهای جدید از کلاسهای موجود است و رابطها برای پیادهسازی کلاسهای انتزاعی و وراثت چندگانه است.
دانلود نسخه PDF Inheritance vs Interface در جاوا
می توانید نسخه PDF این مقاله را دانلود کنید و طبق یادداشت نقل قول برای اهداف آفلاین از آن استفاده کنید. لطفاً نسخه PDF را از اینجا دانلود کنید تفاوت بین وراثت و رابط در جاوا