Abstract متد
منبع : سایت اندروید توتاریال
Abstract
یعنی خلاصه یا چکیده. فارغ از جزئیات. اقا من به شما میگم برام یک برنامه اندروید بنویس که یک متنی رو چاپ کنه . اصلا برام مهم نیست که شما چطور میخوای اینکارو رو با چندتا متد و تابع انجام بدی. من میخوام در نهایت اون متن رو ببینم.
وقتی مامانت میگه ظرفا رو بشور براش مهم نیست که چطور میخوای بشوری بریزی توی ماشین ظرف شویی ، با فرچه بشوری یا با اسکاچ …. بلاخره باید انجامش بدی چون انجامش ندی خودت و ظرفا رو باهم میشوره .
توی Abstract هم نیازی به جزئیات نداره . فقط میشینه یک گوشه میگه اینکارو بکن و اون کارو بکن . Abstract کلاس رو با کلمه کلیدی Abstract میشه شناخت . یک کلاس abstract میتونه متد abstract رو داشته باشه میتونه نداشته باشه و داخلش از متد concrete (غیر abstract) استفاده شده باشه . اما به این نکته توجه کنید که شما از متد abstract تنها در کلاس Abstract میتونید استفاده کنید و غیر از این معنایی نداره . کلاس abstract غیرقابل استفاده است تا زمانی که آن ها را در کلاس های دیگری extend کرده باشیم
بریم یک مثال بزنیم :
// Declaration using abstract keyword
abstract class AbstractDemo{
// Concrete method: body and braces
public void myMethod(){
//Statements here
}
// Abstract method: without body and braces
abstract public void anotherMethod();
}
توی مثال بالا متد abstract رو ببینید که بدون بدنه و براکت هستش و متد Concrete دارای بدنه و براکته.
چرا ما به کلاس Abstract نیاز داریم ؟
تابحال شده یک ایده برنامه نویسی به ذهنتون برسه و بدونید باید چیکار کنید و روال رو میدونید اما نمی دونید چطور اینکار رو بکنید … اینجاس که میایم از کلاس Abstractاستفاده میکنیم.یک مثال دیگه باهم ببینیم :
abstract public class AbstractDemo{
public void myMethod(){
System.out.println("Hello");
}
abstract public void anotherMethod();
}
public class ConcreteDemo{
public void anotherMethod() {
System.out.print("Abstract method");
}
public static void main(String args[])
{
//Can't create object of abstract class - error!
AbstractDemo obj = new AbstractDemo();
obj.display();
}
}
بنظرتون خروجی چی میتونه باشه ؟!!
یک مرور کنیم کد های بالا رو : اول اومدیم یک کلاس AbstractDemo ساختیم که داخلش از دو متد abstract و concrete استفاده کردیم . و در ادامه یک کلاسConcreteDemo ساختیم و داخلش فقط متد Concrete ساختیم . و در کلاس اصلی main اومدیم یک نمونه جدید از کلاس AbstractDemo ساختیم . سوال پیش میاد؟؟ خوب الان از چه متدی نمونه ساخته میشه ؟!!! اینجاست که برنامه به ما اخطار میده و میگه : آهای خوشگله ، تو نمی تونی از چیزی که کلیات رو تعریف کرده نمونه بسازی . منظورش اینه که از کلاس های abstract فقط میتونی extend کنی نه اینکه نمونه بسازی.
حالا اگه نمونه لازم داشتیم چه کنیم ؟
خیلی سادس از قانون ارث بری استفاده میکنیم . میایم یک بچه میسازیم ( subclass ) و extend اش میکنیم از باباش .
به مثال زیر توجه کنید :
abstract class Demo1{
public void disp1(){
System.out.println("Concrete method of abstract class");
}
abstract public void disp2();
}
class Demo2 extends Demo1{
/* I have given the body to abstract method of Demo1 class
It is must if you don't declare abstract method of super class
compiler would throw an error*/
public void disp2()
{
System.out.println("I'm overriding abstract method");
}
public static void main(String args[]){
Demo2 obj = new Demo2();
obj.disp2();
}
}
توی مثال بالا اول یک کلاس abstract ساختیم با اسم Demo1 که داخلش دوتا متد وجود داره که اولین متد Concrete ( همه چیزش واضحه ) و دومین متد abstract . در ادامه اومدیم یک subclass ساختیم یعنی Demo2 و ارث بری کردیم از superclass یعنی Demo1 و حالا در اینجا اومدیم متد abstract (یا همون متد disp2 ) رو بکار کشیدیم یا بازنویسی یا Overriding کردیم که برامون یک متنی رو چاپ کنه.
حالا در کلاس اصلی main ، یک نمونه از Demo2 ساختیم . چون در Demo2 همه چیز مشخصه پس خطایی از ما نخواهد گرفت و درنهایت هم گفتیم که نمونه ایی رو که ساختیم نمایش بده.
منبع : سایت اندروید توتاریال
