menusearch
javapro.ir

♨️ جلسه بیست و دوم - Overriding در جاوا

جستجو
شنبه ۶ مرداد ۱۴۰۳ | ۶:۲۹:۵۷
۱۳۹۵/۱۱/۱ جمعه
(10)
(0)
♨️ جلسه بیست و دوم - Overriding در جاوا
♨️ جلسه بیست و دوم - Overriding در جاوا

فهرست جلسات دوره مقدماتی جاوا

مقدمه اول | جاوا چیست؟

مقدمه دوم | تاریخچه جاوا

مقدمه سوم | ویژگی‌های زبان جاوا

جلسه اول | راهنمای دانلود و نصب JDK

جلسه دوم | اجرای یک برنامه جاوا در Notepad

جلسه سوم | راهنمای دانلود و نصب Eclipse

جلسه چهارم | ساخت اولین برنامه جاوا در Eclipse

جلسه پنجم | متغیر ها در جاوا

جلسه ششم | تغییر فونت محیط Eclipse

جلسه هفتم | عملگر‌های پایه ای جاوا

جلسه هشتم | دستورات شرطی

جلسه نهم | اشیا و کلاس ها

جلسه دهم | ورودی گرفتن

جلسه یازدهم | حلقه‌های کنترلی

جلسه دوازدهم | کلمه کلیدی static

جلسه سیزدهم | کلاس Math

جلسه چهاردهم | کلاس String

جلسه پانزدهم | آرایه‌های یک بعدی

جلسه شانزدهم | کنترل سطح دسرسی (Modifiers)

جلسه هفدهم | متدها در جاوا

جلسه هجدهم | کلمه کلیدی this

جلسه نوزدهم | کلاس‌های داخلی

جلسه بیستم | ارث بری در جاوا

جلسه بیست و یکم | کلمه کلیدی final

جلسه بیست و دوم | Overriding در جاوا

جلسه بیست و سوم | Polymorphism( چند ریختی)

جلسه بیست و چهارم | چندریختی را بهتر یادبگیرید

جلسه بیست و پنجم | Abstraction( انتزاع)

جلسه بیست و ششم | Encapsulation(کپسوله سازی)

جلسه بیست و هفتم | اینترفیس (Interface)

جلسه بیست و هشتم | کلاس Random

جلسه بیست و نهم | Exceptions (استثناها)

جلسه سی ام | کار با فایل در جاوا(Files and I/O)

جلسه سی و یکم | کلاس InputStreamReader

جلسه سی و دوم | کلاس OutputStreamWriter

جلسه سی و سوم | کلاس BufferedReader

جلسه سی و چهارم | کلاس BufferedWriter

جلسه سی و پنجم | Serialization در جاوا

جلسه سی و ششم | چندنخی(Multithreading)

جلسه سی و هفتم | آرایه دو بعدی در جاوا

جلسه سی و هشتم | کلاس ArrayList در جاوا

جلسه سی و نهم | Non Access Modifier در جاوا

 

دوره رایگان مقدماتی زبان جاوا

 

اگه میخوای موارد زیر از جاوا رو بدونی جلسه بیست و دوم آموزش جاوا رو دانلود کن!


🔵 Overriding در جاوا


🔵 قوانین مهم برای متدی که میخواد Overrid شود


🔵 پرداختن به تمامی نکات مفهوم Overriding


🔵 تمامی مفاهیم با مثال ساده توضیح داده شده است


در جلسات گذشته در مورد کلاس های پدر (superclasses) و فرزند (subclasses) صحبت کردیم.هنگامی که کلاس فرزند متد کلاس پدر را در بدنه خود پیاده سازی کند و دستورات درون بدنه آن را تغییر دهد، به این عمل Override کردن متد کلاس پدر در کلاس فرزند میگوییم. ای تغییرات تنها شامل دستورات درون بدنه متد می‌شود و حق تغیییر نوع،پارامترها و نام متد را نداریم میدونم هنوز مفهوم واضع نیست پس در ادامه با ما همراه شوید.


Override کردن متد کلاس پدر درون کلاس فرزند را با یک مثال ساده بررسی میکنیم:
فرض کنید کلاس A کلاس B را به ارث برده است یعنی کلاس A فرزند کلاس B هستش.
کلاس پدر (B) یک متد به نام calculator داره که دو پارامتر از ورودی میگیره و‌ آنها باهم جمع میکنه و در خروجی چاپ میکند بصورت زیر:

 

class B{
   
    void calculator(int x,int y){
        int sum=x+y;
  System.out. print ln("sum="+sum);

    }
}

 

✔ همان طور که در مفاهیم ارث بری در جلسات گذشته بررسی کردیم وقتی یک کلاس ،کلاسی دیگر را به ارث می‌برد می‌تواند مستقیم از متد ها و ویژگی ها کلاس پدرش استفاده کند:

 
package javalike;

class B {

    void calculator(int x, int y) {
        int sum = x + y;
        System.out. print ln("sum=" + sum);
    }
}

publicclass A extends B {

    publicstaticvoid main(String[] args) {

        A a = new A();
        a.calculator(10, 5);
    }
}

 

خروجی:

 

sum=15

 

✔ در اینجا کلاس A کلاس B را به ارث برده است،پس می‌تواند مستقیم از متغیرها و متدهای کلاس پدرش یعنی B استفاده کند.همان طور که مشاهده میکنید در متد main ،مستقیم با شی ساخته شده از کلاس A (فرزند) ،متد کلاس پدر را صدا زده ایم.

 

✔ اینجا ما با به ارث بردن از کلاس پدر ،مستقیم از متد کلاس پدر بدون هیچ تغییری استفاده کرده ایم.

 

خب جناب Override چه کاربردی داره؟!! حالا ماجرا را یکم تغییر میدیم!! کلاس A (فرزند) میخواد از متد calculator کلاس B (پدر) استفاده کند،اما یک مشکلی وجود دارد!!!!!!!! کلاس A نیاز به متد calculator ای داره که دو پارامتر از ورودی بگیره و حاصل تفریق آنها را حساب کنه و در خروجی چاپ کند. اما متد calculator کلاس پدر تنها دو پارامتر از ورودی میگیرد و حاصل جمع آنها را حساب میکند! خب تکلیف چیست؟!! اینجا جناب Override خان به دادمون میرسه! Override میگه بیا متد calculator کلاس پدرت رو در کلاس خودت پیاده سازی کن با این تفاوت که بجای دستور جمع زدن دو پارامتر در بدنه متد calculator ،دستور تفریق دو پارامتر از هم را پیاده سازی کن! و در خروجی نمایش بده! بصورت زیر:

 

package javalike;

class B {

    void calculator (int x, int y) {
          int sum = x + y;
          System.out. print ln("sum=" + sum);
    }
}

public class A extends B {
    void calculator(int x, int y) {
          int subtract = x - y ;
          System.out. print ln("subtract=" + subtract);
    }

    public static void main(String[] args) {

          A a = new A();
          a.calculator(10,5);
    }
}
 

خروجی:

 

subtract=5
 

✔ خب در اینجا در کلاس فرزند (A) متد calculator همنام با متد calculator کلاس پدر (B) است.با توجه به نیاز متد calculator کلاس پدر (B) را در کلاس فرزند (A)Override   کرده ایم.

 

پس Override کردن یعنی متد پدر را در کلاس فرزند پیاده سازی کنیم و باتوجه به نیاز در دستورات درون بدنه آن تغییر ایجاد کنیم.این تغییرات تنها می‌تواند شامل تغییر دستورات درون متد باشد.و ما نمی‌توانیم نام،پارامتر ونوع متد را تغییر بدیم.


با Override کردن متد کلاس پدر درون کلاس فرزند ،هنگام شی ساختن از کلاس فرزند و صدا زدن متد ،برنامه بصورت خودکار متد Override شده درون کلاس فرزند را تشخیص و برای شما معرفی میکند.یعنی دیگه کاری به متد همنام موجود در کلاس پدر ندارد.


به چه هنگام Override کردن به کارمون میاد؟ هنگامی که شما کلاس پدر را به ارث می‌برید و قصد دارید از متد کلاس پدر استفاده کنید و دستورات درون آن را با توجه نیاز تغییر بدید.مثل مثال قبل که متد محاسبه (calculator) در کلاس پدر دو پارامتر از ورودی میگرفت و آنها را با هم جمع میکرد، اما در کلاس فرزند نیاز داشتیم این متد وقتی دو پارامتر از ورودی میگرد آن دو را از هم کم کند که برای این کار دست به Override کردن متد کلاس پدر در کلاس فرزند زدیم.


یک مثال از دنیای واقعی......!!!
جعفر یک موتورسیکلت 125 از پدر خود مشتی غلام به ارث برده است!! جعفر با موتورسیکلت پدر خود با دوستش گرگعلی مسابقه میزاره!!! گرگعلی در این مسابقه برنده می‌شود!!! جعفر امید خودش رو از موتورسیکلت از دست نمیده و دست به چاره ای می‌زند!! جعفر اقدام به دست کاری انجین موتور از 125 به 200 میکند و بار دیگر با گرگعلی مسابقه میدهد و پیروز می‌شود. جعفر یک موتورسیکلت 125 را از پدر خود به ارث برد اما با توجه به نیاز آن را Override کرد و موتور را از 125 به 200 تغییر داد. 😊😊


نکته خیلی مهم : اگر متدی در کلاس پدر از نوع final تعریف شود ،دیگر نمی‌توانیم آن را در کلاس فرزند Override کنیم.


نکته خیلی مهم : کلاس های پدر چون کلاس های بزرگ تر،کلی تر و عمومی تری هستند،هنگام که متغیرها و متدهایی که در ان تعریف میکنیم باید این متغیرها و متدها بیشتر به سمت مفاهیم کلی و مشترک میان تمام فرزندان باشد. مثلا کلاس حیوانات، کلاس حیوانات یک کلاس کلی هستش و به حیوان خاصی اشاره نکرده پس باید در ان مفاهیمی از متغیرها و متدهایی را درونش پیاده سازی کنیم که بین تمام خانواده حیوانات مشترک باشد!!! مثلا متد راه رفتن،آب خوردن،خوابیدن و متغیرهای نام،سن،وزن،نژاد بین همه حیوانات مشترک هستند پس میتوانیم این مفاهیم را در کلاس حیوانات پیاده سازی کنیم اما نمی‌توانیم متدی نظیر تخم گذاشتن را در حیوانات پیاده سازی کنیم!!! چون همه حیوانات تخم گذار نیستند.پس به این نکته دقت کنید هر چقدر به سمت پدر و پدر بزرگ و...یک کلاس می‌رویم و کلاس بزرگ تر می‌شود ،مفاهیمی باید پیاده سازی کنیم که کلی تر و مشترک میان تمام زیر کلاس ها یا کلاس های فرزند باشد.


نکته خیلی مهم : شما در یک کلاس که نقش پدر را دارد متدهای کلی را پیاده سازی می‌کنید،بعد فرزندان باتوجه به شرایط و نیازهای خود متدهای کلی که از پدر به ارث برده اند را Override میکنند. برای مثال کلاس حیوانات متدی به نام حرکت کردن را دارد ،حال کلاسی مانند سگ کلاس حیوانات را به ارث می‌برد.خب متد حرکت کردن که در کلاس پدر سگ یعنی حیوانات هستش کلی و برای همه حیوانات تعریف شده ،کلاس سگ میاد متد حرکت کردن پدر یعنی حیوانات را در بدنه خود پیاده سازی میکند و با توجه به نیاز خود این متد را Override میکند.مثال زیر گویای این حرف است:

 

package javalike;

class Animal {
    publicvoid move() {
          System.out. print ln("Animals can move");
    }
}

class Dog extends Animal {
    public void move() {
        System.out. print ln("Dogs can walk and run");
    }

    publicvoid bark() {
          System.out. print ln("Dogs ahoooo!!! ahoooo!!!");
    }
}

publicclass TestDog {

    publicstaticvoid main(String args[]) {

          Dog b = new Dog(); // Dog object

          b.move(); // runs the method in Dog class
          b.bark();
    }
}

 

خروجی:

 

Dogs can walk and run
Dogs ahoooo!!! ahoooo!!!

 

✔ در این برنامه کلاس Dog کلاس Animal را به ارث برده است.

 

✔ کلاس Dog متد move کلاس Animal را در بدنه خود پیاده سازی کرده و باتوجه به نیاز آن را override کرده است.

 

✔ همان طور که در رنگ سبز می‌بینید ،متد move در کلاس Animal رفتار کلی حرکت کردن برای همه حیوان که مشترک هست راپیاده سازی کرده است. در خط قرمز رنگ متد move کلاس Animal درون کلاس Dog ،override و دستورات درون بدنه آن تغییر داده شده است. نوعی بومی سازی انجام شده یعنی متد move که حرکت کردن مشترک بین حیوانات هستش ("Animals can move") را به راه رفتن و پریدن ("Dogs can walk and run") که مخصوص حیوان سگ است تغییر داده شده است.

 

✔ از کلاس Dog در کلاسی مجزا به نام TestDog شی ساخته و متدهای move و bark را صدا زده ایم.

 

قوانین مهم برای متدی که میخواد Overrid شود:

 

پارامتر متد Overrid شده پدر در کلاس فرزند باید دقیقا با پارامتر متد پدر یکسان باشد.

 

package javalike ;

class B {

     int calculator(int x, int y) {
          int sum = x + y;
          return sum;
    }
}

publicclass A extends B {
     int calculator(int x, int y) {
          int subtract = x - y;
          return subtract;
    }

    publicstaticvoid main(String[] args) {

          A a = new A();

          System.out. print ln(a.calculator(10, 5));
    }
}

 

✔ همان طور که می‌بینید پارامتر متد override شده درون کلاس فرزند با پارامتر متد درون کلاس پدر یکسان است.

 

نوع متد Overrid شده پدر در کلاس فرزند باید دقیقا با نوع متد پدر یکسان باشد.

 

package javalike ;

class B {

     double calculator(int x, int y) {
          double sum = x + y;
          return sum;
    }
}

publicclass A extends B {
     int calculator(int x, int y) {
          int subtract = x - y;
          return subtract;
    }

    publicstatic void main(String[] args) {

          A a = new A();

          System.out. print ln(a.calculator(10, 5));
    }
}

 

خروجی:

 

خطای کامپایل!!!
 

همان طور که در برنامه بالا مشاهده میکنید نوع متد override شده درون کلاس فرزند با متد درون کلاس پدر یکسان نیست.

 

 

.......ادامه این جلسه آموزشی را می‌توانید بصورت کتاب الکترونیکی (PDF شده) در لینک زیر دریافت کنید.



این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)

آموزش آسان و ساده زبان برنامه نویسی جاوا

لینک دانلود

 

 


نشر این مطلب با ذکر منبع (لینک سایت) بلامانع است.
برای با خبر شدن از جدیدترین مطالب آموزشی جاوا عضو کانال تلگرام ما شوید.
 بخش هایی از کتاب جلسه بیست و دوم - Overriding در جاوا را مشاهده می‌کنیدبرای دانلود بر روی لینک دانلود کلیک کنید
بخش هایی از کتاب جلسه بیست و دوم - Overriding در جاوا
  بخش هایی از کتاب جلسه بیست و دوم - Overriding در جاوا را مشاهده می‌کنید برای دانلود بر روی لینک دانلود کلیک کنید
بخش هایی از کتاب جلسه بیست و دوم - Overriding در جاوا
  بخش هایی از کتاب جلسه بیست و دوم - Overriding در جاوا را مشاهده می‌کنید برای دانلود بر روی لینک دانلود کلیک کنید
بخش هایی از کتاب جلسه بیست و دوم - Overriding در جاوا
  بخش هایی از کتاب جلسه بیست و دوم - Overriding در جاوا را مشاهده می‌کنید برای دانلود بر روی لینک دانلود کلیک کنید
بخش هایی از کتاب جلسه بیست و دوم - Overriding در جاوا
instagram
نظرات کاربران
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

بستن
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

0 نظر
هدر سایت
مشاهده سرفصل ها و ثبت نام در دوره Spring Boot جاواپرو  [کلیک کنید]
آموزش پروژه محور اسپرینگ بوت(Spring Boot)-سیستم دانشگاه
ثبت نام در دوره آموزش Spring security
دوره پرتاب | آموزش پیش نیازهای برنامه نویسی
دوره آموزش مبانی زبان برنامه نویسی جاوا
دوره آموزش مفاهیم پیشرفته زبان برنامه نویسی جاوا
مقدمه ای از زبان برنامه نویسی جاوا(java)
آموزش زبان برنامه نویسی جاوا
آموزش گرافیک در زبان برنامه نویسی جاوا
آموزش مدیریت چیدمان گرافیکی در زبان جاوا
آموزش ساخت بازی دوبعدی در زبان جاوا
Collection ها در زبان برنامه نویسی جاوا
آموزش پروژه محور ساخت برنامه مدیریت بانک با JavaFX
نمونه پروژه های رایگان زبان جاوا
آموزش دیتابیس در زبان برنامه نویسی جاوا
نمونه مثال پایه ای زبان برنامه نویسی جاوا
نمونه مثال String در زبان برنامه نویسی جاوا
آموزش جامع برنامه نویسی JavaFX
آموزش ساخت برنامه آزمون تستی در JavaFX
آموزش برنامه نویسی سوکت در جاوا
آموزش ساخت برنامه دفترچه تلفن با JavaFX
آموزش ساخت ربات ساده تلگرام با زبان جاوا
آموزش ساخت برنامه ماشین حساب با JavaFX
آموزش ساخت برنامه ساده مدیریت ایمیل ها با JavaFX
دوره آموزش Spring Boot
سفارش انجام پروژه زبان برنامه نویسی جاوا(JAVA)
سفارش انجام پروژه برنامه نویسی متلب(MATLAB) با قیمت منصفانه و تحویل به موقع
سفارش انجام پروژه زبان برنامه نویسی سی شارپ (#C)
سفارش انجام پروژه زبان برنامه نویسی سی(C)
سفارش انجام پروژه زبان برنامه نویسی پایتون(Python)
سفارش انجام پروژه زبان برنامه نویسی PHP (پی اچ پی)
سفارش انجام پروژه زبان برنامه نویسی اسمبلی(Assembly)
سفارش انجام پروژه زبان برنامه نویسی جاوا اسکریپت (Javascript)
سفارش انجام پروژه هوش مصنوعی
سفارش انجام پروژه طراحی الگوریتم
سفارش انجام پروژه ساختمان داده ها
سفارش انجام پروژه مهندسی نرم افزار
سفارش انجام پروژه شبکه های کامپیوتری
سفارش انجام پروژه پایگاه داده: دیتابیس (database)
 سفارش انجام پروژه سیستم عامل
سفارش انجام پروژه پاورپوینت(PowerPoint)
سفارش انجام پروژه اکسل (Excel)
سفارش انجام تحقیق و تهیه مقاله
سوالات متداول برنامه نویسی
جدیدترین مطالب
گفتگو را شروع کنید
مشاوره ،تدریس خصوصی و سفارش انجام انواع پروژه های برنامه نویسی