در حال بارگذاری...

اینترفیس در Java

یک interface با سرآیندهای خالی متد اعلام کنید، بعد همان متدها را در یک کلاس با implements پر کنید. بنویسید interface Signal با void horn(); و بدون بدنه. بنویسید class Truck implements Signal و به horn بدنه‌ای بدهید که honk چاپ کند. در Yard.java یک Truck بسازید و t.horn() را صدا بزنید. با javac Yard.java ترجمه کنید و java Yard را اجرا کنید. صفحه باید honk را نشان دهد. دموی دوم می‌گذارد یک کلاس هم‌زمان دو interface را implements کند. enum را برای صفحهٔ بعد بگذارید — این درس وعدهٔ یک متد و کلاسی است که آن را نگه می‌دارد.

یک متد interface را پیاده کنید

صفحهٔ override متد horn را روی فرزندی بازنویسی کرد که از قبل extends Car داشت. این صفحه از وعده‌ای بدون بدنه شروع می‌کند. فایل Yard.java را باز کنید. نام کلاس عمومی را Yard نگه دارید. دموهای باقی‌ماندهٔ Car/Truck با extends اگر داستان interface را دفن می‌کنند، چاپ‌های سازنده با super، دموهای مسیر، و هر Scanner صفحه‌کلید را پاک کنید. برنامه نباید منتظر تایپ بماند. به سطر import نیاز ندارید.
اینترفیس را بالای کلاس‌ها اعلام کنید:
interface Signal {
void horn();
}
سرآیند با نقطه‌ویرگول تمام می‌شود. داخل اینترفیس در این شکل مبتدی برای horn بدنهٔ { } نیست.
کلاسی را اعلام کنید که وعده را نگه می‌دارد:
class Truck implements Signal {
داخل Truck یک متد public با همان نام بنویسید و بدنه را پر کنید:
public void horn() {
System.out.println("honk");
}
کلیدواژه implements است، نه extends. کلاس باید برای هر متدی که روی interface آمده بدنه بدهد. در این صفحه فقط horn است.
داخل Yard.main یک truck بسازید و متد را صدا بزنید:
Truck t = new Truck();
t.horn();
فراخوانی بدنه‌ای را اجرا می‌کند که روی Truck نوشته شده، پس صفحه honk چاپ می‌کند.

Yard Truck implements Signal horn

java
interface Signal {
    void horn();
}

class Truck implements Signal {
    public void horn() {
        System.out.println("honk");
    }
}

public class Yard {
    public static void main(String[] args) {
        Truck t = new Truck();
        t.horn();
    }
}

از پوشه‌ای که Yard.java را نگه می‌دارد javac Yard.java را اجرا کنید. وقتی پرانتز، آکولاد و نقطه‌ویرگول درست باشند، javac سطر خروجی خودش نمی‌نویسد. بعد java Yard را اجرا کنید — نه java Yard.java. پسوند .java را از دستور اجرا بردارید. یک کلاس عمومی در فایل بگذارید تا نام با Yard یکی باشد. اینترفیس Signal و کلاس کمکی Truck در این شکل مبتدی بدون public می‌مانند.
صفحه honk را نشان می‌دهد. یک‌بار اجرا را قدم‌به‌قدم ببینید. Java از Yard.main شروع می‌کند. new Truck() یک truck می‌سازد که وعدهٔ Signal را داده. t.horn() بدنهٔ روی Truck را اجرا می‌کند و honk چاپ می‌کند. هرگز new Signal() نمی‌نویسید — اینترفیس متدها را نام می‌برد؛ کلاس بدنه‌ها و شیء را می‌دهد.
اگر javac رد کرد، سه چیز را چک کنید. اول، سطر کلاس باید بگوید implements Signal، نه extends Signal. دوم، هر متد interface به متد جور روی کلاس نیاز دارد. سوم، متد پیاده‌سازی در این شکل تدریس public است تا با قرارداد عمومی interface جور شود. اگر هنوز از فایل قدیمی override مقدار beep می‌بینید، به فایل تدریس interface برگردید و دوباره java Yard را اجرا کنید.
قانون را بلند بگویید وقتی صفحه را می‌بینید: interface فراخوانی را نام می‌برد، کلاس بدنه را پر می‌کند، شیء آن بدنه را اجرا می‌کند. implements را روی کلاسی نگه دارید که مالک چاپ است. در این صفحه enum اختراع نکنید. enum برای درس بعدی است.

دو interface را روی یک کلاس پیاده کنید

برنامهٔ دوم Yard و Truck را نگه می‌دارد. حالا Truck دو interface را پیاده می‌کند. Signal هنوز horn می‌خواهد. Mark متد show می‌خواهد. کلاس هر دو بدنه را پر می‌کند. main هر دو متد را صدا می‌زند.

Yard Truck implements Signal and Mark

java
interface Signal {
    void horn();
}

interface Mark {
    void show();
}

class Truck implements Signal, Mark {
    public void horn() {
        System.out.println("honk");
    }
    public void show() {
        System.out.println("truck");
    }
}

public class Yard {
    public static void main(String[] args) {
        Truck t = new Truck();
        t.horn();
        t.show();
    }
}

با javac Yard.java ترجمه کنید، بعد java Yard را اجرا کنید. صفحه اول honk بعد truck را نشان می‌دهد. سطر اول از وعدهٔ Signal پرشده روی Truck می‌آید. سطر دوم از وعدهٔ Mark پرشده روی همان کلاس می‌آید. نام‌های interface را در فهرست implements با ویرگول جدا کنید: implements Signal, Mark.
سرآیند کلاس را یک‌بار دیگر بخوانید. یک کلاس. دو interface. دو بدنهٔ متد. این تصویر مبتدی نگه داشتن بیش از یک وعده است بدون دو والد extends. Java اجازه می‌دهد یک کلاس فقط از یک کلاس ارث ببرد؛ می‌تواند چند interface را پیاده کند. این صفحه آن فهرست ویرگولی را در یک فایل کوچک Yard نشان می‌دهد.
اگر show را ننویسید در حالی که Mark در فهرست است، javac رد می‌کند چون هر متد interface فهرست‌شده به بدنه نیاز دارد. اگر Mark را از فهرست implements بردارید ولی هنوز show بنویسید، یک متد معمولی دارید، نه وفای وعدهٔ interface برای Mark. وقتی می‌خواهید هر دو وعده چک شود، هر دو نام را روی سطر کلاس نگه دارید.

مقایسه با override از طریق extends

در صفحهٔ override، Truck extends Car بود و hornی را بازنویسی کرد که از قبل بدنهٔ والد داشت. در این صفحه Signal بدون بدنه شروع می‌شود و Truck implements Signal اولین بدنه را می‌دهد. هنوز Yard.java را ترجمه می‌کنید و java Yard را اجرا می‌کنید. هنوز t.horn() را صدا می‌زنید. توکن‌های تازه interface، implements، و — در دموی دوم — فهرست implements جداشده با ویرگول هستند.
اگر هنوز فایل override باز است، extends Car و شاید beep کنار honk می‌بینید. به فایل تدریس interface بروید تا بالای فایل interface Signal نشان دهد و سطر کلاس implements داشته باشد. دموهای enum را از این صفحه بیرون بگذارید. ورودی صفحه‌کلید را از این صفحه بیرون بگذارید.

این صفحه برای enum چه می‌گذارد

این صفحه متدهای interface را با implements پر می‌کند. صفحهٔ بعد enum را نشان می‌دهد، جایی که یک نوع مجموعه‌ای ثابت از نام‌ها را فهرست می‌کند. اینجا با وعده‌های interface بمانید. هنوز لازم نیست دموهای امروز را با فهرست enum عوض کنید.
وقتی بعداً enum به کار می‌برید، ممکن است هنوز روی نوع‌های دیگر در همان برنامه interface پیاده کنید. این صفحه را نیمهٔ interface آن داستان همسایه بدانید. هر دو دموی Yard را تا وقتی honk — و بعد honk به‌اضافهٔ truck — خودکار به نظر برسد تمام کنید، بعد درس enum را باز کنید.

قبل از enum

می‌توانید interface Signal با horn() خالی بنویسید، روی Truck پیاده‌اش کنید، و از t.horn() مقدار honk ببینید. می‌توانید Signal و Mark را روی یک کلاس پیاده کنید و honk بعد truck را ببینید. برای هر دموی نگهداشته Yard.java را ترجمه کنید و java Yard را اجرا کنید. کلاس وعده‌های interface را نگه داشت. صفحهٔ بعد enum است، جایی که یک نوع نام‌های ثابت فهرست می‌کند.
دموی تک‌interface با honk را برای داستان روشن implements نگه دارید. دموی دو interface را برای فهرست روشن ویرگولی نگه دارید. فایل‌های enum را از این صفحه بیرون بگذارید. این سه عادت ایست بازرسی قبل از جلو رفتن‌اند. وقتی بعد از t.horn() مقدار honk می‌آید — و وقتی دموی دوم بعد از show() هم truck چاپ می‌کند — interface کار این درس را کرده و برای موضوع بعدی دربارهٔ enum آماده‌اید.
یک‌بار آخر پوشه را ببینید: یک Yard عمومی، سرآیندهای interface با متد خالی، کلاسی که آن‌ها را implements می‌کند، بدون انتظار صفحه‌کلید، بدون اجبار به enum. یک‌بار دیگر روی دموی باز javac Yard.java و java Yard را اجرا کنید. اگر صفحه هنوز پر کردن‌های interface را که نوشتید چاپ می‌کند، وعده‌ها محکم‌اند و دوره می‌تواند در صفحهٔ بعد به enum برود.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
5
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود