کلاسهای انتزاعی
کلاسها و متدهای abstract در جاوا: قرارداد بدون پیادهسازی.
abstract چیست؟
کلاسی که نمیتوان از آن شیء ساخت — فقط نقشه پایه برای فرزندان:
public abstract class Shape {
String name;
// متد معمولی — پیادهسازی دارد
void display() {
System.out.println("شکل: " + name);
}
// متد انتزاعی — فقط امضا، بدون بدنه!
abstract double area();
abstract double perimeter();
}
قواعد abstract
- کلاس abstract new نمیشود:
new Shape()← خطا! - متد abstract بدنه ندارد — با ; تمام میشود
- فرزند حتماً همه متدهای abstract را پیاده کند
- کلاس با متد abstract حتماً abstract است
پیادهسازی توسط فرزند
public class Circle extends Shape {
double radius;
Circle(double r) {
name = "دایره";
radius = r;
}
@Override
double area() {
return Math.PI * radius * radius;
}
@Override
double perimeter() {
return 2 * Math.PI * radius;
}
}
public class Rect extends Shape {
double w, h;
@Override
double area() { return w * h; }
@Override
double perimeter() { return 2 * (w + h); }
}
استفاده
Shape s1 = new Circle(5); ← نوع والد، شیء فرزند
Shape s2 = new Rect(4, 6);
s1.display();
System.out.println(s1.area()); ← مساحت دایره
System.out.println(s2.area()); ← مساحت مستطیل
چه زمانی abstract؟
| وضعیت | راهحل |
|---|---|
| والد مفهومی بدون نمونه واقعی (Shape، Animal) | abstract class |
| همه متدها فقط قرارداد | interface (مبحث بعد) |
| فیلد + بعضی متدهای پیادهشده | abstract class |
abstract مثل «قرارداد ناقص» است — میگوید هر فرزندی باید این متدها را داشته باشد، اما چگونه، به خودش مربوط است.
این مبحث بخشی از دوره آموزش کامل جاوا است.