‫ Static و final چه ارتباطی باهم دارن ؟
[ answered , oop ]

final: اغلب برای نشون دادن اینکه این کلاس قابل ارثبری نیست استفاده میشه یا برای متغیر ها برای نشون دادن اینکه این متغیر قابل اورراید کردن نیست استفاده میشه

static: برای کلاس های متغیر های استفاده میشه که احتیاج به اینستنس گرفتن ندارن و از قبل توی حافظه موجود هستن یا با اولین ساختن توی حافظه باقی میمونن. مثل پترن سینگلتون @FatemehKavoosi منظور سوال یکم گنگ هست. ارتباط چی دارن؟

ممنون ازتوضیحتون من اصلاح کنم که کاربرد کلمه final پشت یک متغیر اونو تبدیل به یک constant میکنه که دیگه مقدارش قابل تغییر نیست برای متدها هم قابلیتی که فرمودین میشه ! یعنی قابل بازنویسی با override نیست .

این دو هیچ ارتباطی باهم ندارن اما اغلب چون از ویزگی final و static در ثابتها استفاده میشه , این سوال رو مطرح کردم

بعضی ها تفاوت این دورو نمیدونن که استاتیک نقشی در فاینال بودن نداره

درضمن شما دیگه چرا؟ لطفا rtl ر و رعایت کن :)) @oveissi

توضیحی راجع به static بدم

وقتی فیلدی در یک کلاس static تعریف میشه در واقع به این معنی هست که این فیلد جز خصایص یک کلاس هست نه اشیا ها ! و این فیلد استاتیک بین همه نمونه های کلاس مشترک هست !

📌مثالی که بخوام بزنم اینه : فرض ما یک کلاس داریم به نام Person خب هرشخصی یک سری ویژگی ها داره که بین هرشخص متفاوته ! مثلا رنگ چشم ها یا سن و… اما در این میان ی سری خصایص هست بین همه ی اشخاص یکسان هست ! مثل چی ؟ حداکثر سن ! حداکثر سن هرفردا نهایت میتونه 200 باشه . پس ما میایم فیلد MAX_AGE رو نوعشو استاتیک میگیریم و مقدار دهیش میکنیم با 200 . با این کار همه اشیا نیاز ندارن این فیلد رو پر کنن ! اما فیلد رنگ چشم و سن چون برا هرفرد متفاوته اون رو استاتیک نمیکنیم .

*نکته : دقت کنید وقتی متغییری static تعریف میشه، به محض لود شدن کلاس ، اون متغیر هم لود میشه تو کلاس ! اما فیلدهای غیراستاتیک تا زمانی که شی ای ساخته نشه در حافظه لود نمیشن .

یه توضیح هم درباره const و val تو کاتلین In kotlin, const and val both represents the immutability and read only values and act as final keyword in java. val keyword must be used to declare for run time values and const keyword must be used to declare compile time values. هر دو برای متغیرهای ثابت استفاده میشن اما val برای مقادیر run time است و const برای مقادیر کامپایل تایم