کلمه کلیدی 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
برید داخل اکتیویتی مربوط به این صفحه (MyActivity ) و داخل متد OnCreate اش یک onclickListener برای دکمتان بسازید. چون قبلا گفتم اینها را وارد جزییاتش نمیشوم. کد بصورت زیر هست:
که البته خود تعریف دکمه هم توضیحاتی دارد که در جلسات بعد خواهیم پرداخت.
حالا در onClick بنویسید:
Intent myintent = new Intent(MyActivity.this,SeconActivity.class);
حالا در onClick بنویسید:
Intent myintent = new Intent(MyActivity.this,SeconActivity.class);