که باید خودتون دستی در بالا import را بنویسید.
اما اگه از لیست انتخابش کنید با زدن enter خودش import را هم انجام میدهد.
خب حالا گام بعدی. ساختن متد oncreate که اگر یادتان باشد بحث bundle و همچنین وصل کردن Activity به layout را روی آن مطرح کرده بودم.
برای این که کامل متوجه بشید دوباره یک پروژه جاوا همانطور که جلسه پیش گفتم بسازیم. پس در file ، new را بزنید بعد project
بعد اولین گزینه java را انتخاب کرده و بدون تغییری و انتخاب چیز دیگه، پروژتان را بسازید.
اما اگه از لیست انتخابش کنید با زدن enter خودش import را هم انجام میدهد.
خب حالا گام بعدی. ساختن متد oncreate که اگر یادتان باشد بحث bundle و همچنین وصل کردن Activity به layout را روی آن مطرح کرده بودم.
برای این که کامل متوجه بشید دوباره یک پروژه جاوا همانطور که جلسه پیش گفتم بسازیم. پس در file ، new را بزنید بعد project
بعد اولین گزینه java را انتخاب کرده و بدون تغییری و انتخاب چیز دیگه، پروژتان را بسازید.
خب مثل جلسه قبل یک کلاس بسازید اسمش را مثلا بدید A.
حالا بریم داخل A و همانطور که یادتان دادم یک متد تعریف کنید مثلا به اسم Printing:
حالا بریم داخل A و همانطور که یادتان دادم یک متد تعریف کنید مثلا به اسم Printing:
کلمه کلیدی public را جلسه بعد میگم چ هست. شما فقط بنویسیدش. Void که گفتم ینی تابع خروجی نداره.
داخل تابعم دستور چاپ را نوشتم. حالا یک کلاس بسازید به اسم B. و با کلمه extend بگید از A ارث ببرد . بعد داخل کلاس بنویسید
@Override
که با O بزرگ هست.
داخل تابعم دستور چاپ را نوشتم. حالا یک کلاس بسازید به اسم B. و با کلمه extend بگید از A ارث ببرد . بعد داخل کلاس بنویسید
@Override
که با O بزرگ هست.
این یعنی چی؟ وقتی که از یک کلاس ارث میبرید و کلاس شما یک سری متد دارد لازم نیست عینا آن متد اجرا شود. میتوانید اصلا عوضش کنید. و فقط متد را اسم و ورودیش را داشته باشید و محتوای آن را تغییر بدهید. مثلا کلاس حیوانات همه یک متد دارند به اسم خوردن. حالا همه ی حیوانات از جمله شیر و گوزن از این ارث میبرند پس یکی خوردنش مثلا سبزیخواره یکی گوشت خوار!
الان اینجا میخواهم همان متد printing داخل A را استفاده کنم اما به جای آن چاپ کنم hi I am B
خب زیر این Override که نوشتید دقیقا همان متد داخل A را بنویسید. یا کپی کنید. و فقط متن چیزی که چاپ میشود را تغییر بدهید.
الان اینجا میخواهم همان متد printing داخل A را استفاده کنم اما به جای آن چاپ کنم hi I am B
خب زیر این Override که نوشتید دقیقا همان متد داخل A را بنویسید. یا کپی کنید. و فقط متن چیزی که چاپ میشود را تغییر بدهید.
فقط اگر اشتباه بنویسید مثلا نام کلاس را، Override به شما خطا میگیرد. میتوانیم متد را تست کنیم. گفته بودم که برای اجرای کد به متدی بنام main احتیاج داریم. آن را پس بنویسید تا تابعمان را فراخوانی کنیم.
پس کد کلاستون الان اینطور هست:
public class B extends A {
@Override
public void printing(){
System.out.print("hi i am B");
}
public static void main(String args[]){
}
}
پس کد کلاستون الان اینطور هست:
public class B extends A {
@Override
public void printing(){
System.out.print("hi i am B");
}
public static void main(String args[]){
}
}
داخل main میخواهم الان کلاسم را صدا بزنم. یادتان باشد یک مثال انسان زدم گفتم نمیتونم بگم انسان بیا. باید بگم فلانی که انسان هستی بیا.
اینجا هم نمیشود الان کلاسم را بهش بگم متدت را اجرا کن . بلکه یه نمونه ازش میگیرم. میگم حالا فلانی که از نوع B هستی متدت را اجرا کن. برای نمونه گرفتن کد زیر را داخل main بنویسید:
B myb = new B();
اینجا هم نمیشود الان کلاسم را بهش بگم متدت را اجرا کن . بلکه یه نمونه ازش میگیرم. میگم حالا فلانی که از نوع B هستی متدت را اجرا کن. برای نمونه گرفتن کد زیر را داخل main بنویسید:
B myb = new B();
Persian Software Engineers
داخل main میخواهم الان کلاسم را صدا بزنم. یادتان باشد یک مثال انسان زدم گفتم نمیتونم بگم انسان بیا. باید بگم فلانی که انسان هستی بیا. اینجا هم نمیشود الان کلاسم را بهش بگم متدت را اجرا کن . بلکه یه نمونه ازش میگیرم. میگم حالا فلانی که از نوع B هستی متدت را…
این جمله را بخوانید. قشنگ نمونه گرفتن را بیان میکند. و اسم نمونه هم myb هست.
وبرای اینکه نتیجه را ببینید از منوی بالا Run را بزنید و در آن دوباره گزینه Run را انتخاب کنید:
خب دیدید که تابع درست Override یا بازنویسی شده و خروجی را هم میبینید
حالا برید داخل کلاس A و یک متد دیگر بصورت زیر بسازید:
حالا برید داخل کلاس A و یک متد دیگر بصورت زیر بسازید:
اندفعه میخواهم نشان بدهم اگر متد تابعی که از آن ارث میبریم را تغییر ندهیم بهش دسترسی داریم اما عینا همانطور که تعریف شده است اجرا میشود. پس داخل کلاس B جای
myb.printing ();
بنویسید:
myb.printing2();
و اجرا بگیرید. میبینید که متد از A دقیقا به ارث رسیده است
myb.printing ();
بنویسید:
myb.printing2();
و اجرا بگیرید. میبینید که متد از A دقیقا به ارث رسیده است
مفاهیمی که از جاوا لازم بود را دوره کردیم. حالا برگردیم به اندروید. سر متد Oncreate بودیم که این بحثها پیش آمد. این متد هم برای Activity هست اما مشخص هست که من باید تغییرش بدهم مثلا بگم که این کلاسی که برای آن OnCreate ساختی به کدام layout وصل هست. پس باید تغییرش بدم.
پس کد زیر را بنویسید:
پس کد زیر را بنویسید:
با Bundle هم که اشنا هستید. یک نوع Bundle تعریف کردم اسمش را هم دلخواه دادم bdl.
حالا کدهای زیر را به متدتان اضافه کنید:
@Override
public void onCreate(Bundle bdl) {
super.onCreate(bdl);
setContentView(R.layout.second);
}
حالا کدهای زیر را به متدتان اضافه کنید:
@Override
public void onCreate(Bundle bdl) {
super.onCreate(bdl);
setContentView(R.layout.second);
}
خط اول که مشخص هست همان کاری که Bundle گفتم انجام میدهد را برایش تنظیم کردیم.
خط دومم اکتیویتی ما را به layout دوممان وصل کرده است. اون R هم گفتم فعلا درین حد بدانید که برای صدا زدن ابزارهایی که روی صفحه میگذاریم یا Layout ها از R استفاده میکنیم.
حالا بریم به اکتیویتی اصلی مان یعنی MyActivity و به آن بگیم روی دکمه که زده شد بیاد به SecondActivity.
پس یک دکمه روی Layout main بندازید. ایدیش را هم بگذارید btnSecondPage
خط دومم اکتیویتی ما را به layout دوممان وصل کرده است. اون R هم گفتم فعلا درین حد بدانید که برای صدا زدن ابزارهایی که روی صفحه میگذاریم یا Layout ها از R استفاده میکنیم.
حالا بریم به اکتیویتی اصلی مان یعنی MyActivity و به آن بگیم روی دکمه که زده شد بیاد به SecondActivity.
پس یک دکمه روی Layout main بندازید. ایدیش را هم بگذارید btnSecondPage