۳ مجتبی
constructor method
جامعه جاوا (اندروید) ایجاد شده در ۰۵ مهر ۱۴۰۱

سلام خسته نباشید امیدوارم حالتون خوب باشه

وقتی کلاس مثلا Student که از کلاس Person ارث بری کرده اینجا چون constructor رو در Person تعریف کردم باید در Student هم تعریف کنم اما چرا در constructor کلاس Student باید از کلمه super استفاده بکنم ، من نمیتونم برای هر کلاس Person , Student متد سازنده ی مختلفی تعریف بکنم؟

سلام،

اگر کلاس Person کانستراکتورش آرگومانی نداشته باشه یا بین کانستراکتورهاش یکیشون بدون آرگومان باشه نیازی نیست کلاس Student کانستراکتور داشته باشه، خود کامپایلر بصورت اتومات کانستراکتور کلاس super رو بدون آرگومان فراخوانی میکنه:

class Person {
    Person() { }
}
    
class Student extends Person {}
/*******************/
class Person {
    Person(int a) { }
    Person() { }
}
    
class Student extends Person {}

دو مثال بالا بدرستی کار میکنن، اما اگر کلاس Person کانستراکتوری بدون آرگومان نداشته باشد، حتما در subclass باید کانستراکتور کلاس والد فراخوانی بشه چون اگر فراخوانی نشه بازهم کامپایلر بصورت اتومات super بدون آرگومان رو فراخوانی میکند درصورتی که در کلاس والد وجود ندارد و باعث خطا میشه.

class Person {
   Person(int a) { }
}
class Student extends Person {
    Student(int b) { 
        super(b);
    }
}
محسن موحد ۰۵ مهر ۱۴۰۱، ۱۱:۳۴

توضیحتون رو متوجه نشدم


مجتبی ۰۵ مهر ۱۴۰۱، ۱۳:۴۱

کلمه کلیدی سوپر، کانستراکتور والد رو فراخوانی میکنه. باید سوپرو بنویسید تا کانستراکتور والد هم اجرا بشه. سوپر رو یک نام مستعار برای کانستراکتور والد در نظر بگیرید. در چند حالت میتونید ننویسیدش که در پست قبلیم توضیح دادم. سه تا مثالم رو تست کنید متوجه میشید. سه تاش درست هستن.

محسن موحد ۰۵ مهر ۱۴۰۱، ۲۱:۰۹