وقتی Interface جدیدی تعریف میکنید، نوع دادهی مرجع جدیدی تعریف کردهاید. میتوانید نام Interface را در هر جایی که میتوانید از نام هر نوع دادهی دیگری استفاده کنید، به کار ببرید. اگر متغیر مرجعی تعریف کنید که نوعش Interface باشد، هر شیای که به آن اختصاص دهید باید نمونهای از کلاسی باشد که آن Interface را پیادهسازی کرده باشد.
به عنوان مثال، روشی برای پیدا کردن بزرگترین شی در یک جفت شی، برای هر اشیایی که از کلاسی نمونهسازی شده باشد که Relatable را پیادهسازی کرده باشد:
public Object findLargest(Object object1, Object object2) {
Relatable obj1 = (Relatable)object1;
Relatable obj2 = (Relatable)object2;
if ((obj1).isLargerThan(obj2) > 0)
return object1;
else
return object2;
}
با Casting کردن object1 به نوع Relatable، میتواند متد isLargerThan() را فراخوانی کند.
اگر پیادهسازی Relatable را در انواع زیادی از کلاسها انجام دهید، اشیای نمونهسازیشده از هر یک از آن کلاسها میتوانند با متد findLargest() مقایسه شوند — به شرطی که هر دو شی از یک کلاس باشند. به همین ترتیب، همگی میتوانند با متدهای زیر مقایسه شوند:
public Object findSmallest(Relatable object1, Relatable object2) {
if ((object1).isLargerThan(object2) < 0)
return object1;
else
return object2;
}
public boolean isEqual(Relatable object1, Relatable object2) {
if ( (object1).isLargerThan(object1) == 0)
return true;
else
return false;
}
این متدها برای هر اشیای «مرتبطی» کار میکنند، صرفنظر از اینکه سلسلهمراتب ارثبری کلاسشان چیست. وقتی Relatable را پیادهسازی میکنند، هم نوع کلاس خودشان (یا فوقکلاس) و هم نوع Relatable را دارند. این به آنها بخشی از مزایای ارثبری چندگانه را میدهد، جایی که میتوانند هم از یک فوقکلاس و هم از یک Interface رفتار به ارث ببرند.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://dev.java/learn/