آموزش مقدماتی جاوا | وراثت
خطای دسترسی
برای ثبت پاسخ، ابتدا باید در سایت وارد شوید.
وراثت در کلاس ها
فرض کنید می خواهیم یک سایت فروشگاهی را برنامه نویسی کنیم که دو نوع محصول فیزیکی و دانلودی دارد. هر دوی این محصولات ویژگی هایی مثل نام، توضیحات، دسته بندی، قیمت عادی، قیمت ویژه، تصویر و … دارند. اما هر کدام نیز جداگانه ویژگی هایی دارند که مختص به خودشان است. مثلاً محصول فیزیکی ویژگی هایی مثل وزن، ابعاد، هزینه ارسال و … دارد، در حالیکه محصول دانلودی ویژگی هایی مثل حجم فایل، نوع محتوا، لینک دانلود و … دارد.
یک راه حل خوب برای مدیریت اطلاعات چنین داده هایی این است که یک کلاس کلی مربوط به کل محصولات داشته باشیم که ویژگی ها و متد های مشترک را در خود جای می دهد. و به طور جداگانه برای هر نوع محصول کلاسی داشته باشیم که اولاً ویژگی های کلاس اول را به ارث ببرد و ثانیاً ویژگی ها و متد های خود را نیز داشته باشد. برای این منظور از مفهومی به نام وراثت در کلاس ها استفاده می کنیم.
در برنامه نویسی شیء گرا، می توانیم برای هر کلاس، کلاس های فرزندی تعریف کنیم که تمام متد ها و ویژگی های کلاس مادر را به ارث می برند. برای ارث بری از یک کلاس و ساخت کلاس فرزند از کلمه کلیدی extends استفاده می کنیم. در مثال زیر، کلاس PhysicalProduct تمام ویژگی ها و متد های کلاس Product را به ارث می برد.
در اینجا با یک سطح دسترسی جدید به نام protected آشنا می شوید. ویژگی یا متدی که این سطح دسترسی را داشته باشد فقط در خود کلاس و در کلاس های فرزند قابل دسترسی است و در هیچ کلاس دیگری نمی توان به آن دسترسی داشت.
کلاس مادر:
class Product {
protected String name; //نام محصول
protected String description; //توضیحات محصول
protected String price; //قیمت محصول
public void Product(String product_name){
name = product_name;
}
public void printProductName() {
System.out.println(name);
}
}
کلاس فرزند:
class PhysicalProduct extends Product {
private double weight; // وزن محصول
public static void main(String[] args) {
// ساخت شیء از کلاس محصول فیزیکی
PhysicalProduct myPhysicalProduct = new PhysicalProduct("iPhone Mobile"); //نام محصول در ورودی ارسال شده است
// فراخوانی متدی از کلاس مادر
myPhysicalProduct.printProductName();
//دسترسی به متدی از کلاس مادر
System.out.println(myPhysicalProduct.name);
}
}
همانطور که میبینید، یک ویژگی با سطح دسترسی protected در کلاس Product تعریف شده است. این سطح دسترسی به ما می گوید که این متغیر فقط در خود کلاس و در کلاس های فرزند در دسترس است.
برای ثبت پرسش ابتدا در سایت وارد شوید.