final: اغلب برای نشون دادن اینکه این کلاس قابل ارثبری نیست استفاده میشه یا برای متغیر ها برای نشون دادن اینکه این متغیر قابل اورراید کردن نیست استفاده میشه
static: برای کلاس های متغیر های استفاده میشه که احتیاج به اینستنس گرفتن ندارن و از قبل توی حافظه موجود هستن یا با اولین ساختن توی حافظه باقی میمونن. مثل پترن سینگلتون @FatemehKavoosi منظور سوال یکم گنگ هست. ارتباط چی دارن؟
ممنون ازتوضیحتون من اصلاح کنم که کاربرد کلمه final پشت یک متغیر اونو تبدیل به یک constant میکنه که دیگه مقدارش قابل تغییر نیست برای متدها هم قابلیتی که فرمودین میشه ! یعنی قابل بازنویسی با override نیست .
این دو هیچ ارتباطی باهم ندارن اما اغلب چون از ویزگی final و static در ثابتها استفاده میشه , این سوال رو مطرح کردم
بعضی ها تفاوت این دورو نمیدونن که استاتیک نقشی در فاینال بودن نداره
درضمن شما دیگه چرا؟ لطفا rtl ر و رعایت کن :)) @oveissi
توضیحی راجع به static بدم
وقتی فیلدی در یک کلاس static تعریف میشه در واقع به این معنی هست که این فیلد جز خصایص یک کلاس هست نه اشیا ها ! و این فیلد استاتیک بین همه نمونه های کلاس مشترک هست !
📌مثالی که بخوام بزنم اینه : فرض ما یک کلاس داریم به نام Person خب هرشخصی یک سری ویژگی ها داره که بین هرشخص متفاوته ! مثلا رنگ چشم ها یا سن و… اما در این میان ی سری خصایص هست بین همه ی اشخاص یکسان هست ! مثل چی ؟ حداکثر سن ! حداکثر سن هرفردا نهایت میتونه 200 باشه . پس ما میایم فیلد MAX_AGE رو نوعشو استاتیک میگیریم و مقدار دهیش میکنیم با 200 . با این کار همه اشیا نیاز ندارن این فیلد رو پر کنن ! اما فیلد رنگ چشم و سن چون برا هرفرد متفاوته اون رو استاتیک نمیکنیم .
*نکته : دقت کنید وقتی متغییری static تعریف میشه، به محض لود شدن کلاس ، اون متغیر هم لود میشه تو کلاس ! اما فیلدهای غیراستاتیک تا زمانی که شی ای ساخته نشه در حافظه لود نمیشن .