Amir_B
Amir_B
خواندن ۱۷ دقیقه·۳ سال پیش

جلسه هفتم >>ioc2 ,override,hashmap, polymorphism

شروع فیلم جلسه دهم شی گرایی بنام اورراید و همچنین تایمر و هشمپ

خب حلقه ها رو که میدونید میان و یه کاری رو که بهشون میدیم پشت سر هم میتونن به اندازه تعداد بار هایی که خودمون بهش بگیم برامون انجام بدن و اونم با نهایت سرعتش میاد و این کار رو برامونن انجام میده .

یه زمانی شما نمیخوای بر اساس تعداد این کار رو انجام بدی میخوای بر اساس زمان انجام بدی یعنی یه چیزی رو بر اساس زمان تکرار کنی . مثلا بگی هر یک ثانیه یک بار برام تکرار کن هر یه ساعت یک بار برام تکرار کن . تو این شرایط دیگه نمنیتونی از حلقه استفاده کنی چون اگه از حلقه استفاده کنیم . مثلا اگه بخوایم از حلقه ها برای اینکار استفاده کنیم میتونیم حلقه های بیکاری رو توش بندازیم ( مشکل ویدیو ) برنامه تو اون حلقه گیر میفته و هیچ وقت نمی تونه بقیه کار هاتو انجام بده اما من میخوام این اتفاق نیفته میخوام ستش کنم 15 ثانیه یک بار انجام بشه 15 ثانیه که گذشت انجامش بده دیگه کارش نداشته باشه تموم شد بره کار های دیگه انجام بده و بعد از 15 ثانیه دوباره برگرده انجامش بده دوباره بره ادامه کار هاش و و دوباره بعد از 15 ثانیه برگرده و انجامش بده

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

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

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

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

نیو رو میزنم اولین چیزی که خودش اورده روش اینتر میزنم .

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

و این رو میدم به تایمر به این صورت که میگم این تسک رو به صورت 2 ثانیه یک بار اجرا کن . حالا اجراش میکنم ببینم چطوری اجراش میکنه . دیلی برای اولین بار اجرا شدنشه اینم کامپایل برنامه که بعد از دو ثانیه یک سلام دیگر چاپ میکنه . تا بی نهایت این روچاپ میکنه برام . یعنی صد سال دیگه هم این کامپیوتر رو روشن کنی برات این رو چاپ میکنه .

خب میام یه سری کلاس تعریف میکنم اولین کلاس به اسم ویژوال کلاس یا ساعت مجازی درست میکنم

و یه سری وظیفه لازم دارم من . چون میخوام کار های مختلفی انجام بشه مثلا یکی ایمیل برام بفرسته دیگری مرتب کنه کار هام رو کار های مختلفم . . .

پس منم بیام یه وظیفه ای رو تعریف کنم مثلا چیزی به اسم تسک یه سری تسک دیگه . این تسک اصلیم هستش اول بیام این رو تعریف کنم یه تسک چی باید داشته باشه ؟ هر تسکی چی باید داشته باشه من میخوام وظیفه هام . اینطوری باشن که مثلا یه زمان براشون مشخص کنی یه کار براشون مشخص کنی رسید به اون زمان اجرا بشه دو تا فیلد خیلی اساسی دارم یکی اسمش رو میذارم تایم استمپ (اون برچسب زمانی که تو چه زمانی اجرا بشه )

یه متد هم براش تعریف میکنم به اسم مثلا ران که کاری رو که میخوام انجام بشه

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

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

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

تسک ارسال ایمیل یه دونه دیگه تعریف میکنم به اسم سورت فایل تسک تسک سورت کردن فایل ها و تسک سند ایمیل این دو تا کلاس باید اکستند بشن دیگه باید ارث بری بشن دیگه

به این صورت و سازنده اش رو هم بزنم . و هر کدام ویژگی های خاص خودشون رو داشته باشن به این صورت مثلا سند ایمیل یه فیلدی هم داشته باشه که اسم کسی که میخوایم براش ایمیل بنویسیم رو داخلش بنویسیم خب هر کدام کار های بخصوصی رو انجام میدن پس اون متد ران رو باید اور راید کنیم به این صورت که برای هر دو شون اور راید رو همون طور که سازنده روایجاد میکنیم در داخل کلاس ها ایجاد میکنیم .

و داخلش مینویسم مثلا سورت فایل . خب الان که نمیخوام فایل ها رو مرتب کنم . فقط میگم اینجا داره کار ها رو انجام میده همین رو میذارم برای سند ایمیل . .

حالا در مورد اوور راید کامل حرف میزنیم

حالا توی ویرچوالکلاک قسمت ریجستر میخوام تسک رو ریججستر کنم می نویسم تسک


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

یا مثلا میگم : یه چند تا اینطوری انجام بده توی لحظه های مختلف

بعد از این ها یه دونه سورت هم مینویسم

این ها الان ریجسترشون هستش و هنوز کاره انجام نمیشه فقط دارم میگم ویرچوال کلاس توی لحظه ده ات فلان کار رو انجام بده توی لحظه 20 ات فلان کار رو . . .. یعنی چند تای اول سند تو ایمیل بود و دو تای اخر مرتب سازی بود . من یه متدی لازم دارم بعد از اینکه این ریجستر ها رو انجام دادم بگه بهم ک کاره رو شروع کن بگه مثلا ویرچوال کلاک دات استارت اول ریجسترشون میکنم بعد میگم استارت خب استارت رو که بزنم خودش تو ویرچوال کلاک خودش تعریفش میکنه به این صورت که اگه روش alte و enter رو بزنم خودش تو ویرچوال کلاک تعریفش میکنه

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

این ها رو چطوری بیام ثبتشون کنم ؟چطوری بیام این تسک هایی که میان رو ثبت کنم ؟ برای اینکه این ها رو ثبت کنم اگه یادتون باشه ما قبلا ارری لیست رو یاد گرفتیم . هر کدام از این ها که میان داخل باید داخل لیستی ذخیره بشن و خودمون هم امدیم چیزی نوشتیم به اسم شیپ اری لیست و بهتون هم گفتم که خود جاوا ارری لیست داره که خودمون هم میتونیم ازش استفاده کنیم .

و این طوری تعریفش میکردیم . و بعدش میگفتیم که استودنت ها بیا اد کن مثلا یه استیودنتی

دوباره مثلا یه استودنت دیگه و دوباره تا اخر بعد چطوری بهش دسترسی داشتم ؟ این مدلش بهش دسترسی داشتم مثلا فرض کن بعد مینوشتم استودنت اس استودنت ها دات گت . گتش رو نگاه کن اندیسش چیه ؟

صدرصد عدد صحیح هستش

صدرصد لیست هایی که مثل ارری لیست ساخته میشن صدرصدشون اندیسشون عدد صحیح هستش میگم اونی که توی خونه ششم هستش رو بهم بده یا خانه های دیگه

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

بعد دو تا مقدار ازتون میگیره قبلی فقط یه دونه استودنت میگیرفت ازتون ولی این دو تا ازتون میگیره میگه نوع اندیست چی باشه میگم استرینگ باشه میگه نوع دادها ت چی باشه میگم اونم استرینگ باشه بعد اسمش رو هم میذارم دیکشنری بعد میگم نیو هش مپ بعد چطوری بهش مقدار میدم میگم دیکشنری دات پوت ، دیگه نمیگم ادد

میگم بیا قرار بده هلو رو با سلام .

میگم یه چیزی دارم با اندیس هلو بعد مقدار سلام رو براش مقدار دهی میکنیم . و بعد چیز های دگیه مثلا بیا قرار بده چی بگم هرچیزی مثلا شیپ و شکل

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

هلو رو بهم بده هلو چیه میگه سلام .

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

اره دیگه یه متغیر تعریف کردم که هرچی که دوست داریم میشه اسمش گذاشت .حتما هم نباید رشته باشه مثلا میشه یکی رو استرینگ گگذاشت و دیگری رو استودنت گذاشت . هرچی که بخوایم میتونی جاش بذاری هر نوع داده ای میشه برای هر دو تاش بذاری میگم اسم ها رو بذارم مثلا علی و رضا به این صورت :

و قسمتش دومش نمونه سازی استودنت میکنم یک و اسمش علی و و رضایی و معدلش هم 18 این طوری هم میتونم بهش مقدار بدم .

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

ولی بر عکس بهمون نمیده اگه بخوای برعکس انجامش بدی باید برعکس تعریفش کنی یعنی مثلا بنویسی سلام و اون ور بنویسی هلو بر عکسش رو بهت نمیده این وری اندیسه اون وری مقداره همیشه این ور اندیس اون ور مقدار میگم رضا رو بهم بده این استودنت رو بهم میده

میتونی برعکس هم بذاریش ها

یعنی مثلا اونی که ss هستش علی هستش در واقع بعد میگم اسس رو بهم بده رشته بهت میده و اسم دانشجو رو بهت میده

هرمقداری بهش بدی مثلا الان اس اس رو بدم علی رو بهم میده که چیز مهم و پرکاربردی هستش الان من میخوام باهاش یه کار فوق العاده جالب انجام بدم . برای همین برنامه مون میخوام از هش کد استفاده کنم .چطوری ازش استفاده میکنم ؟ این تسک ها هست

میام اینجا یه هش تعریف میکنم پرایویت هش مپ از نوع اینتجر میذارم و از نوع تسک میذارم

برای اینتجر ها از یه نظر دیگه هم خیلی مفیده اینجا بود که من الان میتونم بیام مثلا هشم رو اینطوری تعریف کنم

و اندیس هام رو نامرتب بزنم بگم تو خانه چهار علی رو بزار دیگه مثل اون ارری لیست نیست که بخوام از صفر یک دو سه چهار شروع کنه و ادامه بده نامنظمه مثلا میخام بگم توی اندیس ده ، علی رو توش بذار

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

بعد مثلا میام میگم توی اندیس 1000 مثلا رضا رو تعریف کن

این خونه دومی اس ها ولی اندیسش هزار هستش به چه درد میخوره این ؟ برای دقیقا همین چیزی که اینجا نوشتم :

میخوام توی لحظه دهم ارسال ایمیل به علی رو داشته باشم لحظه بیستم به رضا و . . . فرق دارن دیگه منظم نیست

پس من الان هش مپ تعریف کردم و اینتجر و تسک و میگم مثلا تسک هش مپ و نیوش رو هم انجام میدم

بعد از اینکه این کار رو انجام دادم دیگه میام اینجا و ریجستر رو انجام میدم . میگم تسک هشمپ دات پوت کن

کجا قرار بده مگه تسک هام یه تایم استمپ نداشتن ؟ ! میگم توی لحظه تایم استمپ خود تسک رو قرار بده

این الان شد ریجسترم اما استارتم چی چطوری بیام و زمان ها رو شبیه سازی کنم برای اینکه زمان هام رو شبیه سازی کنم از تایمر استفاده میکنم

از تایمر استفاده میکنم و یه تایم تعریف میکنم و از تایمر تسک استفاده میکنم و نمونه تایمر تسک رو هم میسازم .

و توی هر تیکش میخام بیاد و این تسکی که اینجا هست رو اجرا کنه

به جای اینکه این جا اینطوری بنویسمش میام و پایین تر جدا مینویسمش که شلوغ نشه و به صورت پرایویت مینویسمش یه متغیره دگیه

به این صورت . دیگه من در داخل استارت تایمرم رو اسکیژول میکنم میگم هر کدام از این واحد های زمانی چند واحد زمانی واقعی باشه دیگه مثلا میگم هر یک ثانیه واحد زمانی واقعی خودمم باشه

این الان یعنی در واقع ده ثانیه باید طول بکشه که این علی برای من اجرا بشه ولی من میتونم سرعتش رو ببرم بالا میگم واحد های زمانی من رو ده میلی ثانیه بذار این چون ده میلی ثانیه واحد مان رو گذاشتیم ده میلی ثانیه طول میکشه که انجام بشه .

اصلا اون پریود زمانیش رو از بیرون میگیرم میگم با این بازه زمانی که از بیرون مشخص میکنم بیا برای من انجامش بده که بتونم از بیرون تنظیم کنم .که ویرچوال کلام چطوری کار میکنه توی ران میخوایم چیکارک نه؟

یه شمارنده به اسم کلاک تعریف میکنم مساوی با صفر هستش اولش و توی هر تیکش یه دونه میاد برای من اضافه میکنه

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

برای اینکه ببینم همچین کلاکی وجود داره از کنتینکی استفاده میکنم میگم ایا این کلید رو داری یا ن


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

اگه ریجستر شده باید اون وظیفه ای که توی اون لحظه هست رو برای من اجرا کنه حالا از گت استفاده میکنم میگم اونی که توی لحظه کلاک هست چیکارش کن ؟ رانش کن . صد در صد ران دارن چرا ؟ چون همشون تسک هستن تسک ها صد در صد ران دارن چه اینه چه این

هر کدام (منظور کلاس ها ) باشه فرقی نداره همشون صد در صد ران رو دارن اگه این کلاس وجود داشت بیا برای من اجرا کن

ببینیم چطوری اجراش میکنه همین

میگم ویرچوال کلاک رو اجرا کن با بازه های زمانی 1000 میلی ثانیه ای یا همان یک ثانیه ای یه بار اجراش کنیم حالا باید بیاد و اون کار ها رو برای من اجرا کنه تا لحظه ده باید هیچ کاری انجام نده و کلاک چاپ کنه لحظه 10 باید یه ایمیل بفرسته به علی و همین طور تا اخر ببینیم چطوریه خب کلاک صفر هیچی نداره

اینم اضافه کنیم که کلاک بعد از اجرا اضافه بشه

لحظه هفت سورت کردن فایل رو داریم لحظه ده ایمیلل فرستاد به علی حالا میتونم شرط بذارم که اگه کاری نداشتی دیگه ادامه نده وگرنه همینطور تا بی نهایت میره دیگه خیلی چیز جالب و خیلی هم کاربردیه

نکته خیلی خیلی مهمش چیه ؟ اینه که اوور راید کردم اوور راید یعنی رونویسی کردن

رونویسی چه زمانی اتفاق میفته ؟ رو نویسی زمانی اتفاق میفته که شما یه نمونه از سبکلاس هات رو بریزی تو متغیر ادرس حافظه از نوع کلاست وقتی این کار انجام بشه چون داخل سوپر کلاست ران وجود داره و داخل ساب کلاست هم ران وجود داره وقتی این میره تو متیغر ادرس حافظه اش این اتفاق میفته ها .

میاد این رو

بر میداره و

و این رو خط خطیش میکنه و رو نویسی میکنه و ران ساب کلاس رو میذاره جاش و این نکته جالبشه چرا چون الان توی لحظه هفت تسک سورت فایل میاد داخل سورت فایل و ران سورت فایل رو اجرا کرد چرا چون وقتی من اومدم و گفتگم ریجستر کن سورت فایل رو این نمونه از نوع سورت فایله اما ورودی ویرچوال کلاسم

از نوع تسکه پس میاد روی این ران رو نویسش میکنه در واقع

و این رو برای من اجرا میکنه حالا این اجرا شد دوباره همین طور میره و میرسه به دهمی

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




polymorphismtimer
دانشجوی کارشناسی کامپیوتر
شاید از این پست‌ها خوشتان بیاید