سری مطالب آموزش جاوا 8 – بخش چهارم: متدهای پیشفرض

جاوا 8 مفهوم جدیدی از پیادهسازی (اجرای) متد پیشفرض در رابطها[1] معرفی کرد. این قابلیت برای سازگاریِ عقبگرد اضافهشده است بهگونهای میتوان از اینترفیسهای قدیمی برای نیرومند کردن قابلیت عبارت لامبدا جاوا 8 استفاده کرد. برای مثال اینترفیسهای “List ” یا ” Collection “، اعلان متد forEach را ندارند. بنابراین افزودن چنین متدی خیلی راحت، مجموعه پیادهسازیهای فریمورک را خواهد شکست. جاوا 8 متد پیشفرض را معرفی کرد تا اینترفیس List/Collection بتواند یک پیادهسازی پیشفرض از متد forEach داشته باشد و کلاسی که این اینترفیسها را پیادهسازی میکند، نیازی به پیادهسازی مشابه نداشته باشد.
ساختار کد
public interface vehicle {
default void print() {
System.out.println(“I am a vehicle!”);
}
}
متدهای پیشفرض متعدد
با توابع پیشفرض در اینترفیسها، احتمال اینکه یک کلاس دو اینترفیس را با یک متد پیشفرض پیادهسازی کند وجود دارد. کد زیر نحوه رفع این ابهام را نشان میدهد:
public interface vehicle {
default void print() {
System.out.println(“I am a vehicle!”);
}
}
public interface fourWheeler {
default void print() {
System.out.println(“I am a four wheeler!”);
}
}
راهکار اول ایجاد یک متد خودی است که روی پیادهسازی پیشفرض نوشته میشود.[2]
public class car implements vehicle, fourWheeler {
public void print() {
System.out.println (“I am a four wheeler car vehicle!”);
}
}
راهکار دوم فراخوانی متد پیشفرض اینترفیس مشخصشده با استفاده از کلمه کلیدی super است.
public class car implements vehicle, fourWheeler {
default void print() {
vehicle.super.print();
}
}
متدهای پیشفرض استاتیک
از جاوا 8 به بعد یک اینترفیس میتواند متدهای کمککننده داشته باشد.
public interface vehicle {
default void print() {
System.out.println(“I am a vehicle!”);
}
static void blowHorn()
{
System.out.println(“Blowing horn!!!”);
}
}
مثالهای متد پیشفرض
برنامه جاوایی که در ادامه میآید را با استفاده از ویرایشگری به انتخاب خودتان، مثلاً C:\> JAVA بسازید.
Java8Tester.java
public class Java8Tester {
public static void main(String args[]) {
Vehicle vehicle = new Car();
vehicle.print();
}
}
interface Vehicle {
default void print() {
System.out.println(“I am a vehicle!”);
}
static void blowHorn() {
System.out.println(“Blowing horn!!!”);
}
}
interface FourWheeler {
default void print() {
System.out.println(“I am a four wheeler!”);
}
}
class Car implements Vehicle, FourWheeler {
public void print() {
Vehicle.super.print();
FourWheeler.super.print();
Vehicle.blowHorn();
System.out.println(“I am a car!”);
}
}
تأیید نتیجه
کلاس را با استفاده از کامپایلر javac مانند آنچه در زیر آمده، کامپایل کنید:
C:\JAVA>javac Java8Tester.java
حالا کلاس java8Tester را مانند زیر اجرا کنید:
C:\JAVA>java Java8Tester
باید خروجیهای زیر را نشان دهد:
I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!
بخشهای دیگر این مقاله را از لینکهای زیر بخوانید:
سری مطالب آموزش جاوا ۸ – بخش اول (بررسی اجمالی)
سری مطالب آموزش جاوا ۸ – بخش دوم: نصب جاوا
سری مطالب آموزش جاوا ۸ – بخش سوم: ارجاع متد
سری مطالب آموزش جاوا ۸ : بخش پنجم – برخی از رابطهای تابعی
[1] Interfaces
[2] Override