برنامه نویسی

کلاس ها و رابط های انتزاعی در جاوا

مقدمه

در جاوا ، هر دو کلاسهای انتزاعی وت رابط به شما امکان می دهد قراردادها و رفتار مشترک را برای سایر کلاس ها تعریف کنید. اما چه زمانی باید از دیگری استفاده کنید؟

این مقاله به بررسی تفاوت ها ، موارد استفاده و نمونه های عملی کلاس ها و رابط های انتزاعی می پردازد تا به شما در انتخاب رویکرد مناسب برای طراحی خود کمک کند.


1. رابط چیست؟

در رابط یک قرارداد را تعریف می کند. این شامل امضاهای متد است که کلاسهای اجرایی باید ارائه دهند.

interface Animal {
    void eat();
    void sleep();
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

یک کلاس رابط مانند این را پیاده سازی می کند:

class Dog implements Animal {
    public void eat() {
        System.out.println("Dog eats.");
    }

    public void sleep() {
        System.out.println("Dog sleeps.");
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

از آنجا که جاوا 8 ، رابط ها نیز می توانند حاوی:

  • default روشهای اجرا
  • static روش
  • private روشها (از جاوا 9+)

2. کلاس انتزاعی چیست؟

در کلاس انتزاعی کلاس است که نمی تواند فوری شود و ممکن است حاوی باشد:

  • روشهای انتزاعی (بدون بدن)
  • روشهای بتونی (با بدن)
  • زمینه ها و سازندگان
abstract class Vehicle {
    String brand;

    abstract void start();

    void fuelUp() {
        System.out.println("Filling fuel");
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

یک زیر کلاس باید پیاده سازی هایی را برای همه روشهای انتزاعی فراهم کند:

class Car extends Vehicle {
    void start() {
        System.out.println("Car is starting...");
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


3. تفاوت های کلیدی

نشان رابط کلاس انتزاعی
نوع وراثت لوازم جانبی تمدید کردن
وراثت چندگانه بله (می تواند بسیاری از رابط ها را پیاده سازی کند) خیر (فقط می تواند یک کلاس را گسترش دهد)
سازندگان مجاز نیست مجاز
قسمت public static final تنها هر اصلاح کننده دسترسی
بدنه روش مجاز است defaultبا static (جاوا 8+) بله (بتن + روشهای انتزاعی)
مورد استفاده قابلیت یا قرارداد رفتار پایه مشترک + حالت

4. چه زمانی باید از چه چیزی استفاده کنیم


5. مثال در دنیای واقعی: سیستم اعلان

بیایید بگوییم که می خواهید چارچوبی برای ارسال اعلان ها تعریف کنید.

گزینه 1: رابط

interface Notifier {
    void send(String message);
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

هنگامی که هر اجرای کاملاً مستقل است استفاده می شود (ایمیل ، پیام کوتاه ، Slack …).

گزینه 2: کلاس انتزاعی

abstract class BaseNotifier {
    void log(String message) {
        System.out.println("LOG: " + message);
    }

    abstract void send(String message);
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

هنگامی که می خواهید ورود به سیستم یا منطق تنظیم را در همه NOTIFIERS اجرا کنید ، استفاده می شود.


پایان

هر دو کلاس انتزاعی و رابط ابزارهای قدرتمندی در جاوا هستند. از آنها به عمد استفاده کنید:

دانستن تمایز باعث می شود کد شما بیانگر ، قابل استفاده مجدد و هماهنگ تر با بهترین شیوه های شی گرا باشد.

می توانید کد کامل این مقاله را در اینجا در GitHub پیدا کنید.

در ابتدا در وبلاگ من منتشر شده است: https://nkamphoa.com/abstract-classes-and-interfaces-in-java/

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا