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

مقدمه
در جاوا ، هر دو کلاسهای انتزاعی وت رابط به شما امکان می دهد قراردادها و رفتار مشترک را برای سایر کلاس ها تعریف کنید. اما چه زمانی باید از دیگری استفاده کنید؟
این مقاله به بررسی تفاوت ها ، موارد استفاده و نمونه های عملی کلاس ها و رابط های انتزاعی می پردازد تا به شما در انتخاب رویکرد مناسب برای طراحی خود کمک کند.
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/