وراثت (Inheritance) یکی از اصول اصلی برنامهنویسی شیءگرا (OOP) در جاوا است. این مفهوم به کلاسها اجازه میدهد که ویژگیها و رفتارهای (متدها) یک کلاس دیگر را به ارث ببرند. در اینجا توضیحی در مورد وراثت و نحوه استفاده از آن در جاوا ارائه میدهم:
مفهوم وراثت (Inheritance) در جاوا:
وراثت به یک کلاس (که به آن کلاس فرزند یا subclass گفته میشود) این امکان را میدهد که ویژگیها (فیلدها) و رفتارها (متدها) را از یک کلاس دیگر (که به آن کلاس والد یا superclass گفته میشود) به ارث ببرد.
این امر موجب میشود که بتوانیم ویژگیهای مشترک میان چند کلاس را در یک کلاس والد تعریف کنیم و از تکرار کدها جلوگیری کنیم.
نحوه استفاده از وراثت:
در جاوا، از کلمه کلیدی extends برای تعریف یک کلاس فرزند که از یک کلاس والد به ارث میبرد، استفاده میشود.
کلاس فرزند میتواند متدها و فیلدهای کلاس والد را به ارث ببرد و همچنین متدهای جدید و فیلدهای جدیدی نیز به آن اضافه کند.
اگر کلاس فرزند نیاز داشته باشد تا یک متد از کلاس والد را بازنویسی (override) کند، میتواند از annotation @Override استفاده کند.
مثال از وراثت:
// کلاس والد (superclass)
class Animal {
// فیلدهای کلاس والد
String name;
// متدهای کلاس والد
void eat() {
System.out.println(name + " is eating.");
}
void sleep() {
System.out.println(name + " is sleeping.");
}
}
// کلاس فرزند (subclass)
class Dog extends Animal {
// متد خاص کلاس فرزند
void bark() {
System.out.println(name + " is barking.");
}
}
public class Main {
public static void main(String[] args) {
// ایجاد یک شیء از کلاس Dog
Dog myDog = new Dog();
myDog.name = "Buddy"; // از فیلدهای به ارث رسیده استفاده میکند
myDog.eat(); // از متدهای به ارث رسیده استفاده میکند
myDog.bark(); // از متد خاص خودش استفاده میکند
}
}
ویژگیهای وراثت:
چند سطحی (Multilevel Inheritance): یک کلاس میتواند از یک کلاس دیگر به ارث ببرد و آن کلاس نیز میتواند از یک کلاس دیگر به ارث ببرد.
پلیمورفیسم (Polymorphism): از طریق وراثت، میتوان به یک شیء به عنوان نوع کلاس والد یا فرزند آن دسترسی داشت. این امکان باعث میشود که بتوانیم از انعطافپذیری بیشتری در کد استفاده کنیم.
محدودیتها:
جاوا از وراثت چندگانه (multiple inheritance) پشتیبانی نمیکند، یعنی یک کلاس نمیتواند از چند کلاس دیگر به طور همزمان ارث ببرد. اما میتوان از اینترفیـسها برای رسیدن به این هدف استفاده کرد.
دسترسی به فیلدها و متدهای کلاس والد در کلاس فرزند به سطح دسترسی (access modifiers) آنها بستگی دارد. فیلدها و متدهایی که با private تعریف شدهاند، در کلاس فرزند قابل دسترسی نیستند.
استفاده از super:
کلمه کلیدی super برای ارجاع به فیلدها و متدهای کلاس والد در کلاس فرزند استفاده میشود. همچنین میتوان از آن برای فراخوانی سازنده (constructor) کلاس والد در کلاس فرزند استفاده کرد.
class Dog extends Animal {
Dog(String name) {
super(name); // فراخوانی سازنده کلاس والد
}
void bark() {
System.out.println(name + " is barking.");
}
}
وراثت به برنامهنویسان امکان میدهد که از قابلیت استفاده مجدد کد، سازماندهی بهتر، و مدیریت سادهتر کدها استفاده کنند. در پروژههای بزرگ، استفاده مناسب از وراثت میتواند پیچیدگیهای برنامهنویسی را کاهش دهد و به بهبود کارایی و نگهداری کد کمک کند.
وراثت (Inheritance) یکی از اصول اصلی برنامهنویسی شیءگرا (OOP) در جاوا است. این مفهوم به کلاسها اجازه میدهد که ویژگیها و رفتارهای (متدها) یک کلاس دیگر را به ارث ببرند. در اینجا توضیحی در مورد وراثت و نحوه استفاده از آن در جاوا ارائه میدهم:
مفهوم وراثت (Inheritance) در جاوا: وراثت به یک کلاس (که به آن کلاس فرزند یا subclass گفته میشود) این امکان را میدهد که ویژگیها (فیلدها) و رفتارها (متدها) را از یک کلاس دیگر (که به آن کلاس والد یا superclass گفته میشود) به ارث ببرد. این امر موجب میشود که بتوانیم ویژگیهای مشترک میان چند کلاس را در یک کلاس والد تعریف کنیم و از تکرار کدها جلوگیری کنیم.
نحوه استفاده از وراثت: در جاوا، از کلمه کلیدی extends برای تعریف یک کلاس فرزند که از یک کلاس والد به ارث میبرد، استفاده میشود. کلاس فرزند میتواند متدها و فیلدهای کلاس والد را به ارث ببرد و همچنین متدهای جدید و فیلدهای جدیدی نیز به آن اضافه کند. اگر کلاس فرزند نیاز داشته باشد تا یک متد از کلاس والد را بازنویسی (override) کند، میتواند از annotation @Override استفاده کند.
مثال از وراثت: // کلاس والد (superclass) class Animal { // فیلدهای کلاس والد String name;
// متدهای کلاس والد void eat() { System.out.println(name + " is eating."); }
void sleep() { System.out.println(name + " is sleeping."); } }
// کلاس فرزند (subclass) class Dog extends Animal { // متد خاص کلاس فرزند void bark() { System.out.println(name + " is barking."); } }
public class Main { public static void main(String[] args) { // ایجاد یک شیء از کلاس Dog Dog myDog = new Dog(); myDog.name = "Buddy"; // از فیلدهای به ارث رسیده استفاده میکند myDog.eat(); // از متدهای به ارث رسیده استفاده میکند myDog.bark(); // از متد خاص خودش استفاده میکند } }
class Animal { String name;
}
class Dog extends Animal { Dog(String name) { super(name); // فراخوانی سازنده کلاس والد }
}
وراثت به برنامهنویسان امکان میدهد که از قابلیت استفاده مجدد کد، سازماندهی بهتر، و مدیریت سادهتر کدها استفاده کنند. در پروژههای بزرگ، استفاده مناسب از وراثت میتواند پیچیدگیهای برنامهنویسی را کاهش دهد و به بهبود کارایی و نگهداری کد کمک کند.