انتزاع (Abstraction)
انتزاع (Abstraction) یعنی پنهان کردن جزئیات شلوغ و نشان دادن بخش های مهم. مثل منوی بازی که فقط گزینه ها را می بینی. در جاوا، انتزاع با «کلاس انتزاعی (Abstract Class)» و «متد انتزاعی (Abstract Method)» انجام می شود.
کلاس و متد انتزاعی چیست؟
کلاس انتزاعی شیء نمی سازد. برای استفاده باید از آن ارث بری شود. متد انتزاعی بدن ندارد. زیرکلاس، بدن آن را می نویسد. این کار شبیه برنامه مدرسه است؛ عنوان ها را می بینی، جزئیات بعداً کامل می شود.
abstract class Animal {
public abstract void animalSound();
public void sleep() {
System.out.println("Zzz");
}
}
هشدار: از کلاس انتزاعی مستقیم شیء نساز. جاوا خطا می دهد.
Animal myObj = new Animal();
نمونه کامل با ارث بری
اینجا Animal انتزاعی است. کلاس Pig از آن ارث می برد و صدای حیوان را پیاده سازی می کند. سپس از متد معمولی sleep هم استفاده می کنیم.
// Abstract class
abstract class Animal {
// Abstract method (does not have a body)
public abstract void animalSound();
// Regular method
public void sleep() {
System.out.println("Zzz");
}
}
// Subclass (inherit from Animal)
class Pig extends Animal {
public void animalSound() {
// The body of animalSound() is provided here
System.out.println("The pig says: wee wee");
}
}
class Main {
public static void main(String[] args) {
Pig myPig = new Pig();
myPig.animalSound();
myPig.sleep();
}
}
گام های عملی
- یک کلاس انتزاعی بساز و یک متد انتزاعی بده.
- یک زیرکلاس تعریف کن و متد را پیاده سازی کن.
- در Main شیء زیرکلاس را بساز و متدها را صدا بزن.
نکته: برای مقایسه انتزاع با چندریختی سر بزن به چندریختی. همچنین کلاس های درونی فقط ساختار کد را منظم می کنند.
اگر با «رابط ها (Interfaces)» هم دوست داری انتزاع را ببینی، روی انتزاع در رابط ها کلیک کن.
جمع بندی سریع
- انتزاع جزئیات اضافی را پنهان می کند.
- کلاس انتزاعی شیء نمی سازد.
- بدنِ متد انتزاعی را زیرکلاس می نویسد.
- می توان متد معمولی هم در کلاس انتزاعی داشت.