Abstraction یا انتزاعی سازی در جاوا

بنام خدا .

جلسه دیگری از سری جلسات آموزش شی گرایی در جاوا رو با هم با بحث انتزاعی سازی ای abstraction ادامه میدیم .

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

به کلاس زیر توجه کنید :

 //تعریف یک کلاس از نوع آبسترکت
public abstract class Person
{
    private String name;
    private String lname

    public Person(String name, String lname)
    {
        System.out.println("Constructing an Employee");
        this.name = name;
        this.lname=lname;
    }

    public String toString()
    {
        return name + " " + lname;
    }
    public String getName()
    {
        return name;
    }
    public String getLName()
    {
        return lname;
    }

}

این یک کلاس abstract هست که چهره یک کلاس معمولی رو داره ولی  شما نمیتونید نوع ازش تعریف کنید . یعنی تعریف زیر خطا خواهد داشت :

Person person=new Person("Naser","Naderi");

Strin Name=person.getName();

نتیجه اجرای دو خط بالا خطایی شبیه به این خواهد بود :

 Person.java:46: Person is abstract; cannot be  instantiated
Person person = new Person("Naser", "Naderi");
^
1 error 

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

 public class Student extends Person
{
    private stNo;

    public Student(String name, String lname,int stNo)
    {
        super(name,lname);//مقدار دهی نام و نام خانوادگی به دسترسی به سازنده کلاس والد
        this.stNo=stNo;// مقدار دهی خصوصیت این کلاس
    }

    //مشابه این متد در بخش کلاس والد نیز هست که در اینجا دوباره اورراید شده
    public String toString()
    {

        return name + " " + lname + " " + stNo.toString();
    }


}

حالا  تو یه کلاس دیگه از این کلاس ها استفاده میکنیم به این قسمت خوب توجه کنید :

 /* فایل AbstractDemo.java */
public class AbstractDemo
{
    public static void main(String [] args)
    {
        Student s = new Student("Naser", "Naderi", 154887);
        Person p = new Student("Reza", "Nagilo", 56565);

        System.out.println("Call toString using Student reference --");
       System.out.println( s.toString());

        System.out.println("\n Call toString using Person reference--");
        System.out.println(p.toString());
    }
} 

نتیجه اجرای کلاس   AbstractDemo :

 Call toString using Student reference --
Naser Naderi 154887

Call toString using Person reference--
Reza Nagilo 56565 

اما میشه متد ها رم بصورت abstract تعریف کرد برای اینکار شرایطی به شرح زیر داریم .

- کلاسی که حاوی حد اقل یک متد abstract باشه خودشم باید abstract باشه

- کلاسی که از کلاس حاوی یک متد آبستراکت ارث بری داره باید اون رو Override یا دوباره نویسی کنه در غیر اینصورت خودشم باید abstract باشه

تعریف یک متد abstract به فرم زیر هست :

 public abstract class Person
{
    private String name;
    private String lname

    //تعریف یک متد آبسترکت در یک کلاس آبسترکت
    public abstract double getRecord();

    //بقیه کلاس .....
} 

 

تا جلسه  بعد در پناه حق .

 


فایلهای ضمیمه
توجه! هیچ فایل ضمیمه ای برای این مطلب یافت نشد

نظرات شما نظر جدید