0 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

 تفاوت trait در اسکالا با interface در جاوا چیست؟

2 پاسخ

+2 امتیاز
قبل توسط (1.2هزار امتیاز)
ویرایش شده قبل توسط
 
بهترین پاسخ

سوال خیلی خوبیه ، trait ها شباهت به کلاس های abstract جاوا دارند ،‌یعنی قابلیت های interface جاوا را به علاوه قابلیت پیاده سازی متد ها رو دارند.

اما یک ویژگی خیلی جالبی دیگه اینکه شما می توانید در trait یک رفرنس از کلاسی که بعدا قراره باهاش mix بشه رو مشخص کنید با اینکار علاوه بر اینکه می تونیم از طریق اون رفرنس به اون متدهای اون کلاس دسترسی داشته باشیم میتونیم مشخص کنیم که این trait فقط برای بعضی از کلاس ها قابل mix هست.

trait Foo{
   self => {def close:Unit}
}

در این حالت میگیم که این trait Foo تنها میشه با کلاسی Mix کردش که شامل متدی به نام close که مقدار Unit برگردونه باشه در غیر اینصورت در هنگام کامپایل ارور میده. از دو جهت مفیده این قابلیت اول اینکه در برخی موقعیت ها trait شما باید امن باشه نسبت به استفاده در هر نوع کلاسی و از طرف دیگه اگه برخی ویژگی های این trait به کلاسی که قراره mix کنتش ربط داشته باشه می توانیم با استفاده از اون رفرنس (در این مثال self) استفاده کنیم.

قبل توسط (1.1هزار امتیاز)
+1
تشکر از جواب خوبتون.
0 امتیاز
قبل توسط (1.1هزار امتیاز)

Trait ها در اسکالا stateful هستند ولی اما اینترفیس بهمراه default method در جاوا stateless است و یا اینکه در اسکالا Trait از وراثت چندگانه خطی (linearization) پشتیبانی می کند ولی در اینترفیس های بهمراه default method در جاوا این امکان وجود ندارد.

شباهتی که بین Trait در اسکالا با اینترفیس در جاوا وجود دارد این است که هر دو می توانند هم متدهایی داشته باشند که پیاده سازی دارد و هم متد های abstract داسته باشند و همچنین هر دو نمی توانند constructor داشته باشند و به طبع آن نمی توان از آنها شئ ساخت.

سوالات مشابه

+2 امتیاز
2 پاسخ 988 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 425 بازدید
0 امتیاز
0 پاسخ 681 بازدید
+1 امتیاز
1 پاسخ 891 بازدید
+3 امتیاز
1 پاسخ 834 بازدید
0 امتیاز
1 پاسخ 1.1هزار بازدید
0 امتیاز
1 پاسخ 711 بازدید
+1 امتیاز
5 پاسخ 7.6هزار بازدید
...