خب احتمالا همه میدونید که توی class سه تا سطح دسترسی به متدا یا فیلدا داریم :
حتما میدونید که پروپرتی که private باشه یعنی مال خود اون کلاسه هیچکس نمیتونه ارث بری کنه اونو از اون کلاس و یا خارج از کلاس فراخوانیش کنه , protected هم جوریه که میشه ارث بریش کرد ولی خارج از متدای کلاس نمیشه فراخوانیش کرد , public هم که خود اسمش گویاس, هم ارث بری میشه هم همه جا قابل فراخوانیه .
+ بله !
- خب کسی میدونه اینا کاربردشون چیه مثلا private به چه دردی میخوره؟
+ واسه اینکه کسی نتونه ارث بری کنه یا بیرون از کلاس فراخوانیش کنه !
- بعله این سازو کارشه من سوالم اینه که اومده چه مشکلی روحل کنه ؟
+ اینکه کسی نتونه ارث بریش کنه و یا خارج از کلاس ازش استفاده کنه !
-این "کسی" که میگی بلاخره یه دولوپره دیگه که داره رو اون کدا کار میکنه میتونه راحت تغییر بده به public و استفاده کنه .
+خب بخاطر امنیت !
-اگه کسی بتونه با یه راهی از راه دور دست تو کدا ببره وقتی پروژه رو پروداکشن هست(تقریبا غیر ممکنه) دیگه اینا معنی نداره که همه چی قابل تغییر هست.
+ پس برای چیه ؟
اگر تمام پراپرتی هایی که public نیستن به public تغییر داده بشن هیچ مشکلی تو کدا از لحاظ عملکرد پیش نمیاد , visibility فقط برای روشن کردن تکلیف پروپرتی هاست برای دولوپرا که هم کد رو بهتر بفهمن و هم بهتر دولوپ کنن چه توسط خودشون چه دولوپرای دیگه , فرض کن یه کلاس داری با کلی پروپرتی و از این کلاس کلی کلاس دیگه ارث بری میکنن , وقتی به این کد نگاه میکنی و یه سری پروپرتی private میبینی میفهمی که اون پروپرتیا فقط توی اسکوپ این کلاس یعنی توی متدای این کلاس استفاده شدن , نه بیرون از این کلاس و نه توی کلاسایی که ازش ارث بری کردن , پس تا حدودی تکلیف این پروپرتی برای دولوپری که داره کد رو تحلیل میکنه روشن میشه و در نتیجه هم بهتر میفهمه چی به چیه هم یه جورایی یه قراردادیه برای اون کدا که چطور توسعه داده بشن, و یا مثلا یه پروپرتی protected میبینه میفهمه که این ممکنه توی کلاسایی که ارث بری کردن استفاده شده باشه دیگه public هم مشخصه , visibility فقط واسه ی این اومده , بهتر کردن زندگی دولوپرا.
* به private, protected, public ,ء access modifiers هم میگن .
پ.ن:
نکته ای بود کامنت کنین ,امیدوارم مفید واقع شده باشه .