ده سوال مصاحبه از وراثت در جاوا
جلسات مصاحبه ممکن است سوالات تخصصی نیز در بر داشته باشند. در این مطلب سوالاتی که در زمینه وراثت در جاوا بیشتر پرسیده میشوند آورده شده است تا شما نیز خودتان را محک بزنید.
1. منظور از وراثت چیست؟
وراثت یکی از ویژگیهای کلیدی شیگرایی است. در وراثت یک کلاس(کلاس فرزند) مشخصات یک کلاس دیگر (کلاس پدر) را به ارث میبرد. کلاس فرزند میتواند مشخصات خاص خود را نیز داشته باشد.
2. انواع وراثت چیست؟
۵ نوع وراثت وجود دارد:
single inheritance یک کلاس تنها از یک کلاس دیگر ارث میبرد
multilevel inheritance یک کلاس توسط کلاسی دیگر ارث میبرد که آن کلاس نیز از یک کلاس سومی ارثبری میکند به این ترتیب یک زنجیره وراثت ایجاد میشود
Hierarchical Inheritance یک کلاس توسط کلاسهای زیادی extend میشود
Hybrid Inheritance ترکیبی از انواع وراثت فوق
Multiple inheritance یک کلاس از بیش از یک کلاس دیگر ارث بری میکند که در جاوا پشتیبانی نمیشود.
3. چرا در جاوا وراثت چندگانه پشتیبانی نمیشود؟
برای جلوگیری از ابهام، پیچیدگی و سردرگمی جاوا از وراثت چندگانه پشتیبانی نمیکند.برای مثال اگر کلاس C از دو کلاس A و B ارث بری کند که در آنها یک متد با نام یکسان وجود داشته باشد، آنگاه C دو متد با نام یکسان خواهد داشت که موجب سردرگمی در استفاده از تابع میگردد.
4. چگونه وراثت چندگانه در جاوا پیادهسازی میشود؟
از طریق واسطهای کاربری میتوانیم وراثت چندگانه را پیادهسازی کنیم. چرا که امکان ارث بری از چند واسط کاربری در جاوا وجود دارد.
5. میدانیم که همه کلاسها در جاوا از Java.lang.Object ارثبری میکنند. آیا واسطها (interface ها) هم از این کلاس ارث بری میکنند؟
خیر، تنها کلاسها هستند که فرزند Object میباشند.واسطهای جاوا از این کلاس ارث بری نمیکنند اما کلاسهایی که واسطها را پیادهسازی میکنند نیز فرزند Object هستند.
6. چگونه این محدودیت را قائل میشوید که یک عضو یک کلاس به زیرکلاسهای آن کلاس به ارث نرسد؟
با تعریف آن عضو به صورت Private. چرا که اعضای private به زیرکلاسها به ارث داده نمیشوند.
7. آیا constructorها و initializerها هم به زیرکلاسها به ارث میرسند؟
خیر، constructorها و initializerها (static initializerها و instance initializerها) به زیر کلاسها به ارث نمیرسند. اما بعد از نمونهسازی از روی زیر کلاس اجرا خواهند شد.
8. اگر زیر کلاس و کلاس پدر هر دو یک فیلد با نام یکسان داشته باشند چه میشود؟
فیلد کلاس پدر در کلاس فرزند پنهان خواهد شد و با کلمه کلیدی super قابل دسترسی خواهد بود.
9. آیا اعضای static به زیرکلاس به ارث میرسند؟
بله مشابه زیر:
class A { static int i = 10; static void method() { System.out.println("Static Method"); } } class B extends A { } public class StaticInitializers { public static void main(String[] args) { B.method(); //Calling inherited static method System.out.println(B.i); //printing inherited static field. } }
10. وراثت در جاوا چه فرقی با دنیای واقعی دارد؟
وراثت در جاوا با وراثت بیولوژیکی بسیار متفاوت است. وراثت در جاوا به معنی خاصتر کردن یک کلاس عام و پیادهسازی رابطه is-a است. مثلا در رابطه class Cat extends Animal گربه یک حیوان است. در دنیای واقعی فرزند یک نمونه خاص شده از پدر خود نیست!
منابع:
http://javaconceptoftheday.com/