نمایش نتایج 1 تا 7 از 7

نام تاپیک: وظیفه تابع super

  1. #1

    وظیفه تابع super

    سلام وظیفه تابع super() چیست؟ چون یک کلاس دیدم در سازندش فقط نوشته بود super()
    می خواستم ببینم چیکار می کنه؟

  2. #2
    کاربر دائمی آواتار Nevercom
    تاریخ عضویت
    دی 1387
    محل زندگی
    بستک
    سن
    35
    پست
    1,118

    نقل قول: وظیفه تابع super

    کلمه‌ی کلیدی super به کلاس والد اشاره می کنه، با این کلمه کلیدی میشه به متدها و فیلدهای public و protected کلاس والد دسترسی داشت.
    متد super()، سازنده ی بدون پارامتر کلاس والد رو اجرا می کنه:


    import java.util.*;
    import java.lang.*;
    import java.io.*;


    /* Name of the class has to be "Main" only if the class is public. */
    class Ideone
    {
    public static void main (String[] args) throws java.lang.Exception
    {
    Son kian = new Son();
    kian.howOldAmI();
    kian.howOldIsMyMother();
    }
    }
    class Mother {
    int age = 35;


    public Mother(String childName){
    System.out.println("I'm " + childName + "'s mother and I'm " + age);
    }
    public Mother(){
    System.out.println("Mother is " + age);
    }
    public void ageAndPrint(int age){
    this.age = age;
    System.out.println(this.age);
    }


    public void howOldAmI(){
    System.out.println("I, Mother; am " + age);
    }


    }


    class Son extends Mother {
    int age = 6;
    public Son(){
    super("Kian");
    System.out.println("Son is " + age);

    }
    void howOldIsMyMother(){
    System.out.println("My Mother is " + super.age);
    }

    @Override
    public void howOldAmI(){
    System.out.println("I am " + age);
    super.howOldAmI();
    }

    }


    خروجی:

    I'm Kian's mother and I'm 35
    Son is 6
    I am 6
    I, Mother; am 35
    My Mother is 35


    اینجا میتونید کدها رو ببینید و تست کنید: http://ideone.com/j2ugdu

  3. #3

    نقل قول: وظیفه تابع super

    وقتی کلاس ما از کلاس والد ارث بری می کنه چه نیازی به super داریم؟

  4. #4
    کاربر دائمی آواتار Nevercom
    تاریخ عضویت
    دی 1387
    محل زندگی
    بستک
    سن
    35
    پست
    1,118

    نقل قول: وظیفه تابع super

    اول باید اشاره بشه که super کلمه ی کلیدی هست که دسترسی به کلاس والد رو فراهم می کنه و متد ()super یک استفاده ی خاص از این کلمه ی کلیدی هست که کانستراکتور بدون پارامتر (یا در مثال من که کلاس والد دو کانستراکتور داره، نسخه ی پارامتر دار) رو صدا میزنه.

    ما مفهومی داریم بنام Method Overriding که به ما اجازه میده متدی که در کلاس والد داریم رو در کلاس خودمون پیاده سازی و شخصی سازی کنیم.

    اساس کار ما در اندروید همین قابلیت هست، که فریم وورک اندروید کلاس هایی رو در اختیار ما قرار داده که چارچوب کلی در اونها ساخته شده و ما با شخصی سازی متدهای اون کلاس، نتایج متفاوت در چارچوب اون ساختار رو بدست میاریم.

    مثلاً کلاس Activity رو درنظر بگیرید، بسیاری از کارها در متد onCreate صورت میگیره که همیشه بالاش یک Annotation به شکل @Override رو میبینیم، که در واقع اشاره می کنه که این متد، Override شده از همین متد در کلاس والد هست. دقیقاً از طریق همین Method Overriding هست که اندروید میدونه که باید چه متدی در کلاس ما رو فراخوانی کنه تا Activity ساخته بشه.

    اتفاقاً در همین متد می بینیم که قبل از هر چیز، کد super.onCreate() رو صدا میزنیم، همین قابلیت به ما اجازه میده که ابتدا کدهای متد onCreate در کلاس والد رو اجرا کنیم تا هرکاری لازمه برای آماده سازی اکتیویتی ما انجام بده و بعد کدهای خودمون رو می نویسیم تا شخصی سازی های لازم رو انجام بدیم.

    با اینکار Framework تمام پیچیدگی هاش رو از چشم ما پنهان کرده و ما فقط با رعایت این چارچوب برنامه مون رو مینویسیم و میدونیم که با تبعیت از قواعد طرح شده توسط فریم وورک برنامه ی ما به درستی کار خواهد کرد.

  5. #5

    نقل قول: وظیفه تابع super

    ممنون از پاسخگوی تون باید بیشتر کار کنم تا درکش کنم

  6. #6

    نقل قول: وظیفه تابع super

    اگر ما یک شی از کلاس والد تعریف کنیم می تونه وظایف کلمه کلیدی super رو انجام بده؟

  7. #7
    کاربر دائمی آواتار Nevercom
    تاریخ عضویت
    دی 1387
    محل زندگی
    بستک
    سن
    35
    پست
    1,118

    نقل قول: وظیفه تابع super

    super در بحث وراثت معنی پیدا می کنه و اگر از وراثت استفاده می کنید، موضوعیتی نداره که برای دسترسی به متدها یا فیلدها ی کلاس والد، یک آبجکت از کلاس والد در کلاس فرزند بسازید و هزینه ی ایجاد یک آبجکت دیگه رو به سیستم تحمیل کنید.

    اگر از وراثت استفاده نمی کنید (مثلاً از Composition برای ایجاد رابطه بین یک یا چند کلاس استفاده می کنید)، چون ارتباط وراثتی بین کلاس ها وجود نداره، super کمکی بهتون نمیکنه.

تاپیک های مشابه

  1. وظیفه تابع getJSON.$ چیست؟
    نوشته شده توسط jamejam123 در بخش jQuery
    پاسخ: 2
    آخرین پست: جمعه 08 شهریور 1392, 09:21 صبح
  2. سوال: وظیفه تابع each.$ چیست؟
    نوشته شده توسط jamejam123 در بخش jQuery
    پاسخ: 2
    آخرین پست: چهارشنبه 06 شهریور 1392, 20:29 عصر
  3. سوال: وظیفه پارامتر دوم تابع FindFirstFile چیست؟
    نوشته شده توسط davidmajdi در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: سه شنبه 23 خرداد 1391, 10:51 صبح
  4. تابع انتخاب تصادفی یک فیلد از بین رکوردهای بانک اطلاعاتی
    نوشته شده توسط hesam_din در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 1
    آخرین پست: جمعه 23 اسفند 1381, 04:51 صبح
  5. برای برنامه هاتون تابع تعریف کنید
    نوشته شده توسط (امید) در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 1
    آخرین پست: پنج شنبه 22 اسفند 1381, 00:21 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •