هرچه با Object و روش های آن بیشتر آشنا باشید، می توانید کارهای بیشتری با برنامه های جاوا خود انجام دهید.
- همه چیز درباره Object: superclass جاوا
- نحوه گسترش Object: یک مثال
- چه کاری که Java’s getClass() انجام می دهد
- روش clone() جاوا چه می کند
- متد Javasquals() چه کاری انجام می دهد li>
- روش finalize() جاوا چه کاری انجام می دهد li>
- روش hashCode() جاوا چه کاری انجام می دهد li>
- روش toString() جاوا چه کاری انجام می دهد li>
- روش های wait() و notify() جاوا چه می کنند a>
کتابخانه کلاس استاندارد جاوا از هزاران کلاس و انواع مرجع دیگر تشکیل شده است. علیرغم تفاوت در قابلیت های آنها، هر یک از این انواع به طور مستقیم یا غیر مستقیم کلاس Object
را گسترش می دهند. آنها با هم یک سلسله مراتب وراثت عظیم را تشکیل می دهند.
نیمه اول این آموزش اصول وراثت در جاوا را معرفی کرد. یاد گرفتید که چگونه از کلیدواژههای extends
و super
جاوا برای استخراج کلاس فرزند از کلاس والد، فراخوانی سازندهها و متدهای کلاس والد، روشهای لغو و غیره استفاده کنید. اکنون، ما تمرکز خود را بر روی سلسله مراتب ارث بری کلاس جاوا، java.lang.Object
معطوف خواهیم کرد.
مطالعه Object
و روشهای آن به شما درک کاربردیتری از وراثت جاوا و نحوه عملکرد آن در برنامههایتان میدهد.
آنچه در این آموزش جاوا خواهید آموخت
- همه چیز درباره Object: سوپرکلاس جاوا
- نحوه گسترش Object: یک مثال
- کاری که متد getClass() جاوا انجام می دهد
- کاری که متد clone() جاوا انجام می دهد
- کاری که متد ()quals Java انجام می دهد
- کاری که متد finalize() جاوا انجام می دهد
- کاری که متد hashCode() جاوا انجام می دهد
- کاری که متد toString() جاوا انجام می دهد
- کارهایی که جاوا () و متدهای notify() انجام می دهند
همه چیز درباره Object: superclass جاوا
Object
کلاس ریشه یا سوپرکلاس نهایی سایر کلاسهای جاوا است. ذخیره شده در بسته java.lang
، Object
متدهای زیر را اعلام می کند که همه کلاس های دیگر به ارث می برند:
کلون شی محافظت شده()
بولی برابر است(Object Obj)
حفاظت شده void finalize()
Class> getClass()
int hashCode()
void notify()
void notifyAll()
String toString()
void wait()
انتظار بیهوده (مدت زمان طولانی)
انتظار خالی (مدت زمان طولانی، نانوهای داخلی)
یک کلاس جاوا این متدها را به ارث می برد و می تواند هر روشی را که نهایی
اعلام نشده است لغو کند. برای مثال، روش غیرfinal
toString()
را می توان لغو کرد، در حالی که روش های final
wait()
نمی تواند.
ما به هر یک از این روشها و نحوه استفاده از آنها برای انجام وظایف خاص در زمینه کلاسهای جاوا نگاه خواهیم کرد. ابتدا، بیایید قوانین و مکانیسم های اساسی برای وراثت Object
را در نظر بگیریم.
انواع عمومی
در لیست بالا، ممکن است به getClass()
توجه کرده باشید که نوع بازگشت Class>
نمونه ای از نوع عمومی در مقاله آینده در مورد انواع عمومی بحث خواهم کرد.
نحوه گسترش Object: یک مثال
یک کلاس می تواند به صراحت Object
را گسترش دهد، همانطور که در فهرست ۱ نشان داده شده است.
public class Employee extends Object
{
private String name;
public Employee(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public static void main(String[] args)
{
Employee emp = new Employee("John Doe");
System.out.println(emp.getName());
}
}
از آنجایی که می توانید حداکثر یک کلاس دیگر را گسترش دهید (از قسمت ۱ به خاطر بیاورید که جاوا از وراثت چندگانه مبتنی بر کلاس پشتیبانی نمی کند)، مجبور نیستید به صراحت Object< را گسترش دهید. /code>; در غیر این صورت، شما نمی توانید هیچ کلاس دیگری را گسترش دهید. بنابراین، همانطور که در فهرست ۲ نشان داده شده است،
Object
را بطور ضمنی گسترش می دهید.
public class Employee
{
private String name;
public Employee(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public static void main(String[] args)
{
Employee emp = new Employee("John Doe");
System.out.println(emp.getName());
}
}
فهرست ۱ یا فهرست ۲ را به صورت زیر کامپایل کنید:
javac Employee.java
برنامه حاصل را اجرا کنید:
java Employee
شما باید خروجی زیر را مشاهده کنید:
John Doe
چه کاری که Java's getClass() انجام می دهد
متد getClass()
کلاس زمان اجرا هر شیئی را که بر روی آن فراخوانی می شود برمی گرداند. کلاس زمان اجرا با یک شی Class
نشان داده می شود که در بسته java.lang
یافت می شود. Class
همچنین نقطه ورود به Java Reflection API است که برنامه جاوا برای یادگیری ساختار خود استفاده می کند.
اشیاء کلاس و روشهای همگامسازی استاتیک
شیء Class
برگشتی، شیئی است که توسط روشهای Static synchronized
کلاس نمایش داده شده قفل می شود. برای مثال، static synchronized void foo() {}
. (همگام سازی جاوا را در یک آموزش آینده معرفی خواهم کرد.)
متد clone() جاوا چه می کند
متد clone()
یک کپی از شیئی را که روی آن فراخوانی شده است ایجاد و برمی گرداند. از آنجا که نوع برگشتی clone()
Object
است، مرجع شی که clone()
برمیگرداند باید قبل از تخصیص به نوع واقعی شیء فرستاده شود. که به متغیری از نوع شی ارجاع می دهد. کد موجود در فهرست ۳ شبیه سازی را نشان می دهد.
class CloneDemo implements Cloneable
{
int x;
public static void main(String[] args) throws CloneNotSupportedException
{
CloneDemo cd = new CloneDemo();
cd.x = 5;
System.out.println("cd.x = " + cd.x);
CloneDemo cd2 = (CloneDemo) cd.clone();
System.out.println("cd2.x = " + cd2.x);
}
}
کلاس CloneDemo
فهرست ۳، رابط Cloneable
را که در بسته java.lang
یافت میشود، پیادهسازی میکند. Cloneable
توسط کلاس (از طریق کلمه کلیدی implements
) پیاده سازی می شود تا از روش clone()
Object
جلوگیری کند. پرتاب نمونه ای از کلاس CloneNotSupportedException
(همچنین در java.lang
یافت می شود).
CloneDemo
یک فیلد نمونه مبتنی بر int
به نام x
و یک روش main()
را اعلام میکند که تمرین میکند. این کلاس. main()
با یک عبارت throws
اعلان می شود که CloneNotSupportedException
را از پشته فراخوانی متد عبور می دهد.
main()
ابتدا CloneDemo
را نمونهسازی میکند و کپی نمونه حاصل از x
را به ۵
مقداردهی میکند. سپس مقدار x
نمونه را خروجی میکند و clone()
را در این نمونه فراخوانی میکند و قبل از ذخیره مرجع، شیء برگشتی را به CloneDemo
ارسال میکند. در نهایت، مقدار فیلد x
کلون را خروجی میدهد.
فهرست ۳ (javac CloneDemo.java
) را کامپایل کنید و برنامه را اجرا کنید (java CloneDemo
). شما باید خروجی زیر را مشاهده کنید:
cd.x = 5
cd2.x = 5
نیازی به لغو clone()
در مثال قبلی نداشتیم زیرا کدی که clone()
را فراخوانی میکند در کلاس در حال شبیهسازی قرار دارد ( CloneDemo
). اگر تماس با clone()
در کلاس دیگری قرار داشت، باید clone()
را لغو کنید.
از آنجایی که clone()
محافظت شده
اعلام شده است، اگر این کار را نمیکردید، پیام "کلون دسترسی محافظت شده در شیء را دارد" دریافت خواهید کرد. قبل از کامپایل کردن کلاس، آن را لغو کنید. فهرست ۴ یک نسخه بازسازی شده از فهرست ۳ است که clone()
را نشان می دهد.
class Data implements Cloneable
{
int x;
@Override
public Object clone() throws CloneNotSupportedException
{
return super.clone();
}
}
class CloneDemo
{
public static void main(String[] args) throws CloneNotSupportedException
{
Data data = new Data();
data.x = 5;
System.out.println("data.x = " + data.x);
Data data2 = (Data) data.clone();
System.out.println("data2.x = " + data2.x);
}
}
فهرست ۴ یک کلاس Data
را اعلام میکند که نمونههای آن باید شبیهسازی شوند. داده
رابط Cloneable
را برای جلوگیری از پرتاب CloneNotSupportedException
هنگام فراخوانی متد clone()
پیادهسازی میکند. سپس فیلد نمونه مبتنی بر int
را x
اعلام میکند و روش clone()
را لغو میکند. روش clone()
super.clone()
را برای فراخوانی superclass خود (یعنی Object
) clone() اجرا می کند. روش
. روش clone()
نادیده گرفته شده، CloneNotSupportedException
را در بند پرتاب
خود شناسایی می کند.
فهرست ۴ همچنین یک کلاس CloneDemo
را اعلام می کند که: داده
را نمونه سازی می کند، فیلد نمونه آن را مقدار دهی اولیه می کند، مقدار فیلد نمونه را خروجی می دهد، داده ها را شبیه سازی می کند. code> شی، و مقدار فیلد نمونه آن را خروجی می دهد.
فهرست ۴ (javac CloneDemo.java
) را کامپایل کنید و برنامه را اجرا کنید (java CloneDemo
). شما باید خروجی زیر را مشاهده کنید:
data.x = 5
data2.x = 5
شبیه سازی کم عمق
شبیهسازی سطحی (همچنین به عنوان کپیبرداری سطحی شناخته میشود) به کپی کردن فیلدهای یک شیء بدون کپی کردن هر شیئی اشاره میکند که از فیلدهای مرجع آن شیء ارجاع داده میشود (در صورت وجود هرگونه مرجع) زمینه های). لیست ۳ و ۴ در واقع شبیه سازی سطحی را نشان می دهد. هر یک از فیلدهای cd
-، cd2
-، data
-، و data2
-مرجع، شیئی را که دارای کپی خودش از فیلد x
مبتنی بر int
.
شبیه سازی کم عمق زمانی که همه فیلدها از نوع اولیه هستند و (در بسیاری از موارد) زمانی که هر فیلد مرجع به اشیاء تغییر ناپذیر (غیر قابل تغییر) اشاره دارد، به خوبی کار می کند. با این حال، اگر هر یک از اشیاء ارجاع شده قابل تغییر باشد، تغییرات ایجاد شده در هر یک از این اشیاء توسط شی اصلی و کلون(های) آن قابل مشاهده است. فهرست ۵ نشان می دهد.
پست های مرتبط
وراثت در جاوا، قسمت ۲: شی و روش های آن
وراثت در جاوا، قسمت ۲: شی و روش های آن
وراثت در جاوا، قسمت ۲: شی و روش های آن