وراثت (Inheritance)
ارثبری در جاوا: extends، super، override و بازاستفاده کد.
وراثت چیست؟
کلاسی (فرزند) از کلاس دیگر (والد) فیلدها و متدها را به ارث میبرد — بازاستفاده کد بدون تکرار:
// کلاس والد
public class Animal {
String name;
void eat() {
System.out.println(name + " غذا میخورد");
}
void sleep() {
System.out.println(name + " میخوابد");
}
}
// کلاس فرزند با extends
public class Dog extends Animal {
void bark() {
System.out.println(name + " واق واق میکند!");
}
}
// Dog هم eat و sleep دارد هم bark!
Dog d = new Dog();
d.name = "رکس";
d.eat(); ← از والد
d.bark(); ← خودش
extends — کلیدواژه وراثت
class فرزند extends والد {
// فیلدها و متدهای جدید
}
Method Overriding — بازنویسی
فرزند میتواند متد والد را بازنویسی کند:
public class Animal {
void makeSound() {
System.out.println("صدای حیوان");
}
}
public class Cat extends Animal {
@Override ← نشانگر بازنویسی (اختیاری اما توصیهشده)
void makeSound() {
System.out.println("میو!");
}
}
Animal a = new Cat();
a.makeSound(); ← میو! (نسخه فرزند اجرا میشود)
super — دسترسی به والد
public class Dog extends Animal {
@Override
void makeSound() {
super.makeSound(); ← اول متد والد
System.out.println("واق واق!"); ← بعد خودش
}
}
super در سازنده
public class Animal {
String name;
Animal(String name) {
this.name = name;
}
}
public class Dog extends Animal {
Dog(String name) {
super(name); ← فراخوانی سازنده والد
}
}
سلسلهمراتب وراثت
Animal
├── Dog
├── Cat
└── Bird
└── Penguin (پرنده ولی نمیتواند بخواند — override!)
جاوا فقط وراثت تکوالدی دارد — هر کلاس فقط یک extends! برای چندمنبع از interface استفاده کنید.
مزایای وراثت
- بازاستفاده: کد والد یکبار نوشته، بارها استفاده
- سلسلهمراتب: روابط طبیعی مدل میشوند
- چندریختی: پایه polymorphism است
این مبحث بخشی از دوره آموزش کامل جاوا است.