ارث بری در جاوا

۲۳ دی ۱۳۹۵

ارث بری (inheritance) یک مفهوم بنیادی و کلیدی در برنامه‌نویسی شی‌گرا است.در برنامه‌نویسی نیز این واژه مفهمومی مشابه دنیای واقعی دارد و به معنای ارث بردن خصوصیات است. در این نوشته قصد دارم نگاهی دوباره به ارث‌بری در جاوا داشته باشم.


فرض کنید که دو کلاس  ClassA و ClassB داریم که کلاس ClassB از  ClassA ارث بری کرده است؛ به بیان دیگر  ClassB فرزند ClassA است.
 public class ClassA {

}

 public class ClassB extends ClassA{
    public String property;
}

حال قطعه کد زیر را در نظر بگیرید:
 public class Main {
   public static void main(String[] args) {
      ClassA a = new ClassA();
      ClassB b = new ClassB();
      b.property = "blah blah!";
      a = b;//assignment1
      b = a;//assignment2
  }
}

سوال: به نظر شما کدام یک از انتساب‌های بالا درست است؟  assignment1 یا assignment2؟

پاسخ: درواقع  assignment1 بدون مشکل اجرا می‌شود؛ ولی assignment2 یک خطای کامپایلری به ما می‌دهد.

جالب بود؟ حال قطعه کد زیر را در نظر بگیرید:
public class Main {
   public static void main(String[] args) {
       ClassA a = new ClassA();
       ClassB b = new ClassB();
       b.property = "blah blah!";
       a = b;
       ClassB b1 = new ClassB();
       b1 = (ClassB) a;
       System.out.println(b1.property);
   }
}

سوال: به نظر شما خروجی کد بالا چه خواهد بود؟ خطای کامپایلری یا چاپ عبارت "blah blah!" در کنسول؟

پاسخ: قطعه کد بالا به صورت کاملا درست اجرا خواهد شد و ما هیچ خطای کامپایلری نخواهیم داشت. :)




پاسخ‌های شما به سوال فوق چه بود؟ اگر پاسخ‌هایتان اشتباه بود بهتر است نگاهی دوباره به مبحث ارث‌بری در جاوا بیندازید!

اما نکته مهم اینکه آیا می‌توانید دلیل پاسخ‌های بالا را در قسمت نظرات برای من و سایر خوانندگان این نوشته نیز بنویسید؟

هیچ نظری موجود نیست: