ජාවා හි පොදු, ආරක්ෂිත, පැකේජ-පෞද්ගලික සහ පෞද්ගලික අතර වෙනස කුමක්ද?


3175

ජාවා, එහි ප්රවේශය අකුරු එක් එක් භාවිත කිරීමට විට මත පැහැදිලි නීති, එනම් පෙරනිමි (පුද්ගලික ඇසුරුම්) වන අතර, public, protectedහා private, ඇති කරමින් classහා interfaceහා උරුමය සමග කටයුතු?


162
privateපැකේජය තුළ වෙනත් පන්ති වලින් සැඟවෙයි. publicපැකේජයෙන් පිටත පන්ති වලට නිරාවරණය වේ. protectedයනු publicඋප පංති වලට පමණක් සීමා වූ අනුවාදයකි .
Museful

87
Enn ටෙනෙන්රිෂින් - නැත; C ++ ට පටහැනිව, ජාවා හි protectedමෙම ක්‍රමය මුළු පැකේජයෙන්ම ප්‍රවේශ විය හැකිය. ජාවාහි දෘශ්‍යතා ආකෘතියේ මෙම මෝඩකම ඉලක්කය බිඳ දමයි protected.
නිකොලස් බාබුලෙස්කෝ

35
Ic නිකොලාස් එය සම්පූර්ණ පැකේජයෙන් ප්‍රවේශ විය හැකිය protected. ප්‍රවේශ විකරණකාරකයක් ලෙස , protectedකරන්නේ පැකේජයෙන් පිටත උප පංතිවලට නිරාවරණය වීමයි.
Museful

15
@tennenrishin - හොඳයි, නිකොලස් කීවේ එයයි ... ඔබ දැන් එය නැවත කියනවා. ඔබ මුලින් කී දෙය නම් protected- සහ මම උපුටා දක්වන්නේ - 'උප පංති වලට පමණක් සීමා වූ පොදු අනුවාදයකි' යන්න ඔබේම පිළිගැනීම අනුව සත්‍ය නොවන බැවින් ආරක්ෂිතව මුළු පැකේජය හරහා ප්‍රවේශ වීමට ඉඩ සලසයි (එර්ගෝ, එය උප පංති වලට ප්‍රවේශ වීම සීමා නොකරයි . )
luis.espinal

10
ජාවා හි ආරක්ෂිත ප්‍රවේශ ප්‍රකාරය මෝඩ බව මම නිකොලස් සමඟ එකඟ වෙමි. සිදුවූයේ ජාවා තිරස් (දැලිස්) සහ සිරස් ප්‍රවේශ සීමා කිරීමේ සුදුසුකම් සමඟ සම්බන්ධ වීමයි. පෙරනිමි විෂය පථය යනු තිරස් / දැලිස් සීමා කිරීමකි. පොදු යනු තවත් තිරස් සීමාවකි. පුද්ගලික සහ (C ++) ආරක්ෂිත සිරස් වේ. අපට හරස් කැපීමේ ප්‍රවේශයක් තිබුනේ නම් වඩා හොඳ වනු ඇත protected-package, අපට ඇත්ත වශයෙන්ම අවශ්‍ය වූ දුර්ලභ අවස්ථාවන් සඳහා, protectedආරක්ෂිත C ++ අනුවාදයට සමාන වීමට ඉඩ හැරීම .
luis.espinal

Answers:


5646

නිල නිබන්ධනය ඔබට යම් ප්‍රයෝජනයක් විය හැකිය.

______________________________________________________________
| පන්තිය │ පැකේජය │ උප පංතිය │ උප පංතිය │ ලෝකය |
| │ │ │ (එකම pkg) │ (diff pkg) │ |
| ──┼──────── |
| පොදු │ + │ + + + │ + | 
| ──┼──────── |
| ආරක්ෂිත │ + │ + + │ + │ | 
| ──┼──────── |
| නවීකරණයක් නොමැත │ + │ + │ + │ │ | 
| ──┼──────── |
| පුද්ගලික │ + │ │ │ │ |
| ___________ | _______ | _________ | __________ | __________ | ________ |
 +: ප්‍රවේශ විය හැකි හිස්: ප්‍රවේශ විය නොහැක

5
එකම වගු privateගොනුවේ ඕනෑම පන්ති / ස්ථිතික ක්‍රමයක් මගින් සාමාජිකයින්ට පවා දැකීමට / භාවිතා කිරීමට හැකි බැවින් ඉහත වගුව වැරදිය .
උසාගි මියාමොටෝ

5
ආරක්ෂිත සාමාජිකයාට ප්‍රවේශ විය හැක්කේ එකම පැකේජයක උප පංතියෙන් පමණක් වන නමුත් විවිධ පැකේජ වලින් උප පංතියෙන් නොවේ. ඉහත වගුවේ නිවැරදි කිරීමක් තිබිය යුතුය
නික්

2
ලෝකය ඔබේ ව්‍යාපෘතිය තුළ ඇත. මම තවදුරටත් පැහැදිලි කළ යුතුයි. පුස්තකාල ඔබේ ව්‍යාපෘතිය තුළ ඇති අතර, ඔබ පුස්තකාලයක් නිර්මාණය කරන්නේ නම්, ඔවුන් මෙම පොදු පන්ති සහ ක්‍රමවේදයන් ද හෙළි කරනු ඇත. එබැවින්, ඔබේ ව්‍යාපෘතිය තුළ පමණක් පැවසීම ටිකක් off ත ය. "එය භාවිතා කරන සෑම දෙයක්ම" වඩා හොඳ විස්තරයකි.
adprocas

3
උදාහරණයක් ලෙස, මා සතුව තිබේ නම් MyClassසහ මම කරන්නේ නම් AnotherClass extends MyClassඇතුළත සිට සියලු ආරක්‍ෂිත සහ පොදු ක්‍රම සහ දේපල වෙත මට ප්‍රවේශය ලැබේ AnotherClass. මම කරන්නේ නම් MyClass myClass = new MyClass();දී AnotherClassකොහේ හරි - අපි මෙම ඉදිකිරීමටත් කියන්න මට ඉඩ දෙන්න - මම එකම රාජ්ය ක්රම හැකියාව ලැබේ එය වෙනස් ඇසුරුම තුල නම්. මා එසේ කළහොත් මට = new MyClass() { @Override protected void protectedMethod() { //some logic } };ආරක්ෂිත ක්‍රම වෙත ප්‍රවේශ විය හැකි බව පෙනේ, නමුත් මේ ආකාරයේ එය දිගු කිරීම හා සමාන වන නමුත් ඒ වෙනුවට පේළිගත කරන්න.
adprocas

3
අවාසනාවට, මෙම පිළිතුර දළ වශයෙන් සරල කිරීමකි. යථාර්ථය ටිකක් සංකීර්ණයි, විශේෂයෙන් ඔබ සලකා බලන විට protected(එය සම්පූර්ණයෙන්ම තේරුම් ගැනීමට අපහසු ප්‍රවේශ ප්‍රවේශයක් - protectedඇත්ත වශයෙන්ම නොදන්නා දේ කුමක්දැයි තමන් දන්නා බව සිතන බොහෝ අය ). එසේම, බොහීමියානු පෙන්වා දුන් පරිදි, එය ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත - එය එක් එක් පිවිසුම් විකරණකාරකය භාවිතා කරන්නේ කවදාද යන්න ගැන කිසිවක් නොකියයි . මගේ මතය අනුව, මෙම ප්රශ්නයට පිළිතුර නොවේ තරමක් downvote නරක තරම්, නමුත් සමීප. නමුත් ඉහළට 4000 කට වඩා? මෙය සිදුවූයේ කෙසේ?
ඩාවුඩ් ඉබ්න් කරීම්

484

(Caveat: මම ජාවා ක්‍රමලේඛකයෙක් නොවෙමි, මම පර්ල් ක්‍රමලේඛකයෙක්මි. පර්ල්ට විධිමත් ආරක්ෂාවක් නොමැති අතර සමහර විට ගැටලුව මා හොඳින් වටහාගෙන ඇත්තේ :))

පුද්ගලික

ඔබ සිතන ආකාරයට එය දැකිය හැක්කේ එය ප්‍රකාශයට පත් කරන පන්තියට පමණි .

පැකේජය පුද්ගලිකයි

එය දැකිය හැක්කේ සහ භාවිතා කළ හැක්කේ එය ප්‍රකාශයට පත් කළ පැකේජයට පමණි. ජාවා හි පෙරනිමිය මෙයයි (සමහරු එය වැරැද්දක් ලෙස දකිති).

ආරක්ෂිතයි

පුද්ගලික + පැකේජය උප පංති හෝ පැකේජ සාමාජිකයින්ට දැකිය හැකිය.

මහජන

සෑම කෙනෙකුටම එය දැක ගත හැකිය.

ප්රකාශයට පත් කරන ලදී

මා පාලනය කරන කේතයෙන් පිටත දෘශ්‍යමාන වේ. (ජාවා සින්ටැක්ස් නොවන නමුත් මෙම සාකච්ඡාව සඳහා එය වැදගත් වේ).

C ++ "මිතුරා" යනුවෙන් හැඳින්වෙන අතිරේක මට්ටමක් නිර්වචනය කරන අතර ඔබ ඒ ගැන අඩු දැනුමක් ලබා ගැනීම වඩා හොඳය.

ඔබ භාවිතා කළ යුත්තේ කවදාද? සමස්ත අදහස වන්නේ තොරතුරු සැඟවීම සඳහා සංයුක්ත කිරීමයි. ඔබේ පරිශීලකයින්ගෙන් යමක් කරන්නේ කෙසේද යන්න පිළිබඳ විස්තර සැඟවීමට ඔබට හැකි තරම්. මන්ද? මන්ද එවිට ඔබට ඒවා පසුව වෙනස් කළ හැකි අතර කිසිවෙකුගේ කේතය කඩ නොකරන්න. ඔබ විසින් නැවත සකස් කරන ලද කේතය යමෙකු භාවිතා කරයි යැයි කරදර නොවී දෝෂ ප්‍රශස්තිකරණය කිරීමට, ප්‍රතික්‍රියාකාරක කිරීමට, නැවත සැලසුම් කිරීමට සහ දෝෂ නිවැරදි කිරීමට මෙය ඔබට ඉඩ දෙයි.

ඉතින්, මාපට ඇඟිල්ලේ රීතිය වන්නේ දේවල් තිබිය යුතු තරම් දෘශ්‍යමාන කිරීමයි. පුද්ගලිකව ආරම්භ කර අවශ්‍ය පරිදි වැඩි දෘශ්‍යතාවයක් පමණක් එක් කරන්න. පරිශීලකයාට දැන ගැනීමට අත්‍යවශ්‍ය වන දේ පමණක් ප්‍රසිද්ධ කරන්න, ඔබ මහජන කැක්කුම ඇති කරන සෑම විස්තරයක්ම පද්ධතිය ප්‍රතිනිර්මාණය කිරීමේ හැකියාව.

අභ්‍යන්තරව ප්‍රසිද්ධියට පත්කරනවාට වඩා හැසිරීම් අභිරුචිකරණය කිරීමට පරිශීලකයින්ට අවශ්‍ය නම්, ඒවා අභිබවා යා හැකිය, බොහෝ විට එම ධෛර්යය වස්තුවක් බවට පත් කර එම අතුරු මුහුණත පොදු කිරීම වඩා හොඳ අදහසකි. එමඟින් ඔවුන්ට නව වස්තුවක් ඇතුල් කළ හැකිය. නිදසුනක් ලෙස, ඔබ සීඩී ප්ලේයරයක් ලියමින් "මෙම සංයුක්ත තැටිය පිළිබඳ තොරතුරු සොයා ගැනීම" ටිකක් අභිරුචිකරණය කිරීමට අවශ්‍ය නම්, එම ක්‍රම ප්‍රසිද්ධ කිරීමට වඩා, ඔබ එම සියලු ක්‍රියාකාරකම් තමන්ගේම වස්තුවකට දමා ඔබේ වස්තුව ලබා ගන්නා / සෙටරය ප්‍රසිද්ධ කරන්න . මේ ආකාරයෙන් ඔබේ ධෛර්යය හෙළිදරව් කිරීම ගැන නොසැලකිලිමත් වීම හොඳ සංයුතිය හා උත්සුකයන් වෙන් කිරීම දිරිමත් කරයි

පුද්ගලිකව, මම "පුද්ගලික" සහ "පොදු" සමඟ බැඳී සිටිමි. බොහෝ OO භාෂාවන්ට එය තිබේ. "ආරක්ෂිත" පහසු විය හැකි නමුත් එය ඇත්තෙන්ම වංචාවකි. අතුරු මුහුණතක් පුද්ගලිකත්වයට වඩා වැඩි වූ පසු එය ඔබගේ පාලනයෙන් බැහැර වන අතර භාවිතයන් සෙවීම සඳහා ඔබ වෙනත් පුද්ගලයින්ගේ කේත සොයා බැලිය යුතුය.

"ප්‍රකාශිත" අදහස පැමිණෙන්නේ මෙහිදීය. අතුරු මුහුණතක් වෙනස් කිරීම (එය නැවත ප්‍රතිනිර්මාණය කිරීම) අවශ්‍ය වන්නේ ඔබ එය භාවිතා කරන සියලුම කේත සොයාගෙන එයද වෙනස් කළ යුතුය. අතුරුමුහුණත පුද්ගලික නම්, ගැටළුවක් නැත. එය ආරක්‍ෂිත නම් ඔබේ සියලු උප පංති සොයා ගත යුතුය. එය පොදු නම් ඔබේ කේතය භාවිතා කරන සියලුම කේත සොයා ගත යුතුය. සමහර විට මෙය කළ හැකි ය, උදාහරණයක් ලෙස, ඔබ අභ්‍යන්තර භාවිතය සඳහා වන ආයතනික කේතයක් මත වැඩ කරන්නේ නම් එය අතුරු මුහුණතක් පොදු නම් පමණක් වැදගත් නොවේ. ආයතනික ගබඩාවෙන් ඔබට සියලු කේත ලබා ගත හැකිය. නමුත් අතුරු මුහුණතක් "ප්‍රකාශයට පත් කර" තිබේ නම්, එය ඔබගේ පාලනයෙන් පිටත භාවිතා කරන කේතයක් තිබේ නම්, එවිට ඔබ සො. ඔබ එම අතුරුමුහුණත හෝ අවදානම් බිඳීමේ කේතයට සහාය විය යුතුය. ආරක්ෂිත අතුරුමුහුණත් පවා ප්‍රකාශයට පත් කළ හැකි යැයි සැලකිය හැකිය (ඒ නිසා මම එසේ නොකරමි

බොහෝ භාෂාවන් රාජ්‍ය / ආරක්‍ෂිත / පෞද්ගලිකත්වයේ ධූරාවලි ස්වභාවය යථාර්ථයට අනුකූල නොවන පරිදි සීමිත බව සොයාගෙන ඇත. ඒ සඳහා, ගති ලක්ෂණ පන්තියක් පිළිබඳ සංකල්පයක් ඇත , නමුත් එය තවත් සංදර්ශනයකි.


26
මිතුරන් -> "ඔබ ඒ ගැන අඩු දැනුමක් ලබා ගැනීම වඩා හොඳය" ---> එය තෝරාගත් දෘශ්‍යතාවයක් ලබා දෙයි, එය පැකේජයේ පෞද්ගලිකත්වයට වඩා උසස් ය. C ++ හි, එහි භාවිතයන් ඇත, මන්ද සියලු කාර්යයන් සාමාජික ශ්‍රිත විය නොහැකි අතර මිතුරන් ප්‍රසිද්ධියට වඩා හොඳය. ඇත්ත වශයෙන්ම නපුරු මනසින් අනිසි ලෙස භාවිතා කිරීමේ අනතුරක් තිබේ.
සෙබස්තියන් මැක්

30
C ++ හි “ආරක්‍ෂිත” යන්නට වෙනත් අර්ථයක් ඇති බව ද සැලකිල්ලට ගත යුතුය - ආරක්ෂිත ක්‍රමයක් private ලදායී ලෙස පුද්ගලික ය, නමුත් එය තවමත් උරුම පන්තියකින් හැඳින්විය හැකිය. (එකම පැකේජයක් තුළ ඕනෑම පන්තියකට එය හැඳින්විය හැකි ජාවා වලට වඩා වෙනස්ව.)
රයිස් වැන් ඩර් වේර්ඩන්

9
HRhysvanderWaerden C # මෙම අංගයේ C ++ ට සමාන වේ. උප කාණ්ඩයට ප්‍රවේශ විය හැකි නමුත් සම්පූර්ණ පැකේජයටම අයත් සාමාජිකයෙකු ප්‍රකාශ කිරීමට ජාවා ඉඩ නොදීම මට අමුතු දෙයක් ලෙස පෙනේ. එය මට උඩු යටිකුරු කිරීමකි - ළමා පන්තියකට වඩා පැකේජයක් පුළුල් විෂය පථයකි!
කොන්රාඩ් මොරව්ස්කි

15
On කොන්රාඩ් මෝරව්ස්කි IMHO පැකේජය උප පංතියට වඩා කුඩා විෂය පථයකි. ඔබ ඔබේ පන්තියේ අවසාන කොටස ප්‍රකාශයට පත් කර නොමැති නම්, පරිශීලකයින්ට එය උපවර්ග කිරීමට හැකි විය යුතුය - එබැවින් ජාවා ආරක්ෂිත ඔබගේ ප්‍රකාශිත අතුරුමුහුණතේ කොටසකි. OTOH, පැකේජ තනි සංවිධානයක් විසින් ව්‍යංගයෙන් සංවර්ධනය කර ඇත: උදා: com.mycompany.mypackage. ඔබේ කේතය මගේ පැකේජය තුළ ප්‍රකාශ වන්නේ නම්, ඔබ ව්‍යංගයෙන් ඔබ මගේ සංවිධානයේ කොටසක් ලෙස ප්‍රකාශ කරයි, එබැවින් අපි සන්නිවේදනය කළ යුතුය. මේ අනුව, පැකේජය උප පංතියට (මගේ වස්තුව දිගු කරන පුද්ගලයින්) වඩා කුඩා / පහසු ප්‍රේක්ෂක පිරිසකට (මගේ සමාගමේ පුද්ගලයින්) ප්‍රකාශයට පත් කරන අතර එමඟින් අඩු දෘශ්‍යතාවයක් ලෙස ගණන් ගැනේ.
නාමික

2
friendපන්ති අතර විශේෂ සම්බන්ධතා නිර්වචනය කිරීමට හොඳය. නිවැරදිව භාවිතා කරන විට එය බොහෝ අවස්ථාවන්හිදී සුපිරි සංසරණයට ඉඩ දෙයි. නිදසුනක් ලෙස, වර්‍තමාන කර්මාන්තශාලා පන්තියකට අභ්‍යන්තර පරායත්තතාවයන් ගොඩනඟන ලද වර්ගයකට එන්නත් කළ හැකිය. එයට නරක නමක් ඇත, මන්ද හොඳින් සැලසුම් කරන ලද වස්තු ආකෘතියක් නිවැරදිව නඩත්තු කිරීම ගැන තැකීමක් නොකරන පුද්ගලයින්ට ඔවුන්ගේ වැඩ බර ලිහිල් කිරීම සඳහා එය අනිසි ලෙස භාවිතා කළ හැකිය.
ඩෙනිස්

434

මෙන්න වගුවේ වඩා හොඳ අනුවාදයක්, එයට මොඩියුල සඳහා තීරුවක් ද ඇතුළත් වේ.

ජාවා ප්‍රවේශ විකරණකාරක

පැහැදිලි කිරීම්

  • පෞද්ගලික මන්ත්රී ( i) වේ පමණක් එය ප්රකාශයට පත් කරන්නේ එකම පන්තිය තුල ප්රවේශ.

  • සමග සාමාජිකයෙකු කිසිදු ප්රවේශ විකරණකාරකය ( j) එම ඇසුරුම තුල පන්ති තුළ පමණක් ලබාගත හැකි ය.

  • ආරක්ෂා සාමාජික ( k) එම පැකේජය සියලු පන්ති තුළ ප්රවේශ හා වෙනත් ඇසුරුම් දී උප වර්ගිකරණයන් තුල.

  • මහජන මන්ත්රී ( l) සියලු පංතිවලට ප්රවේශ (එය පදිංචිව නම් මොඩියුලය එය ප්රකාශයට පත් කරන්නේ පැකේජය අපනයනය නොවන බව).


තෝරා ගැනීමට කුමන විකරණකාරකයද?

ප්‍රවේශ විකරණකාරකය යනු අහම්බෙන් කැඩී යාම වැළැක්වීම සඳහා ඔබට උපකාරී වන මෙවලමකි (*) . ඔබ සාමාජිකයා පන්තියට, පැකේජයට, පන්ති ධූරාවලියට හෝ අභ්‍යන්තරයට අයත් නොවන දෙයක් වීමට අදහස් කරන්නේ දැයි ඔබගෙන්ම අසාගෙන ඒ අනුව ප්‍රවේශ මට්ටම තෝරන්න.

උදාහරණ:

  • ක්ෂේත්‍රයක් long internalCounterවිකෘති සහ ක්‍රියාත්මක කිරීමේ විස්තරයක් බැවින් එය බොහෝ විට පෞද්ගලික විය යුතුය.
  • කර්මාන්තශාලා පන්තියක (එකම පැකේජයක) පමණක් ක්ෂණිකව ස්ථාපනය කළ යුතු පන්තියකට පැකේජයෙන් සීමිත ඉදිකිරීම්කරුවෙකු සිටිය යුතුය, මන්ද එය පැකේජයෙන් පිටත සිට කෙලින්ම ඇමතීමට නොහැකි විය යුතුය.
  • void beforeRender()විදැහුම් කිරීමට පෙර නිවැරදි ලෙස හැඳින්වෙන අභ්‍යන්තර ක්‍රමයක් සහ උප පංතිවල කොක්කක් ලෙස භාවිතා කිරීම ආරක්ෂා කළ යුතුය.
  • void saveGame(File dst)සඳහා GUI කේතය යන නමින් නම් කර තිබූ ක්රමය ජනතාව දැනුවත් විය යුතු.

(*) හරියටම සංසරණය යනු කුමක්ද?


11
නිකම්ම කියනවා: රතු / කොළ වර්ණ ගැන්වීම වෙන්කර හඳුනා ගැනීමේ ගැටළු ඇති බොහෝ දෙනෙක් සිටිති. රතු / කොළ (හෝ කහ / තැඹිලි / ...) වර්ණ ගැන්වීමේ යෝජනා ක්‍රම භාවිතා කරන වගු ඕනෑම දෙයකට “වඩා හොඳ” වන්නේ කලාතුරකිනි ;-)
GhostCat

1
හොස්ට් කැට්, මම එකඟ නොවෙමි. මම "ක්රියා" සමග අවිවාදයෙන්ම පිළිගැනීමට රතු / කොළ ඉපදෙනවා හිතන්නේ / බොහෝ ජනතාව සඳහා "වැඩ කරන්නේ නැහැ", එනම්, එය වේ බොහෝ විකල්ප වඩා හොඳ.
aioobe

8
colourblindawareness.org/colour-blindness/… ... වර්ණ අන්ධ මිනිසුන්ගෙන් 8% ක් දළ වශයෙන් 1% ඩියුටෙරනෝප්, 1% ප්‍රෝටෝනෝප්, 1% ප්‍රෝටෝනෝමලස් සහ 5% ඩියුටෙරනෝමලස් ලෙස බෙදිය හැකිය . මම එම 5% න් 50% න් එකක් වන බැවින්, ඉතිරි සහතිකය: රතු / කොළ උරා බොයි.
GhostCat

6
OstGhostCat හරි .. එය මම බලාපොරොත්තු වූවාට වඩා විශාල ජනගහනයකි. මම මෙම වර්ණ අන්ධතා සිමියුලේටරය තුළ රූපය උඩුගත කර විවිධ මාතයන් පරීක්ෂා කළෙමි . ඒකවර්ණ / ඇක්‍රොමැටොප්සියා ප්‍රකාරයේදී පවා වර්ණ වෙනස සාධාරණ ය. ඔබට වෙනස දැකිය හැකිද? නැතහොත් සිමියුලේටරය අක්‍රියද? (රතු / කොළ පාට මිනිසුන් දැකීමට ඉතා බුද්ධිමත් බව
මගේ මතයයි

3
මට වෙනස දැකිය හැකිය, නමුත් රියදුරු බලපත්‍රය සඳහා ජර්මනියේ අප විසින් කළ යුතු වර්ණ අන්ධභාවය පිළිබඳ පරීක්ෂණවලින් අඩක්වත් සමත් වීමට මට හැකියාව තිබේ ;-) ... නමුත් එවැනි සිමියුලේටරයක් ​​“ප්‍රමාණවත්” යැයි මම සිතමි.
GhostCat

206
____________________________________________________________________
                | highest precedence <---------> lowest precedence
*———————————————+———————————————+———————————+———————————————+———————
 \ xCanBeSeenBy | this          | any class | this subclass | any
  \__________   | class         | in same   | in another    | class
             \  | nonsubbed     | package   | package       |    
Modifier of x \ |               |           |               |       
————————————————*———————————————+———————————+———————————————+———————
public          |              |          |              |     
————————————————+———————————————+———————————+———————————————+———————
protected       |              |          |              |      
————————————————+———————————————+———————————+———————————————+———————
package-private |               |           |               |
(no modifier)   |              |          |              |      
————————————————+———————————————+———————————+———————————————+———————
private         |              |          |              |       
____________________________________________________________________

1
වචන වලින් තැබීම වටී - "ආරක්ෂිත විකරණකාරකය මඟින් වස්තුව වෙනත් පැකේජ හරහා ලබා ගත හැකි අතර පෙරනිමි / වෙනස් නොකරන යන්ත්‍ර එකම පැකේජයකට ප්‍රවේශ වීම සීමා කරයි"
vanguard69

2
@ vanguard69 එම protectedවිකරණකාරකය මෙම කැපී පෙනෙන කරයි දෙයක් සමහර අනෙකුත් පැකේජයකින් (පන්ති, ක්රමය, හෝ ක්ෂේත්ර) සමහර අනෙකුත් පන්ති ලබා ගත හැකි යන සැකය පමණක් අනෙකුත් පන්ති බව එහිදී පන්තියේ උපපංතිය බවයි protectedසටහන් - දෙයක් ප්රකාශ කර ඇත.
අබ්දුල්

"විකාර"? "මෙම උප පංතිය වෙනත් පැකේජයක"? හහ්. මම හිතුවේ මම ජාවා දන්නවා කියලා.
sehe

Lex ඇලෙක්සැන්ඩර් ෆාර්බර් ඔබ විශේෂිත බ්‍රව්සර වින්‍යාසයක් සඳහා ප්‍රශස්තිකරණය කළාද? දැන් මේක මගේ ක්රෝම් හා මේ ෆයර්ෆොක්ස්
sehe

හ්ම් එහෙනම් මගේ වෙනස නැවත කරමු
ඇලෙක්සැන්ඩර් ෆාබර්

165

පහසු රීතියක්. සියල්ල පුද්ගලික ලෙස ප්‍රකාශ කිරීමෙන් ආරම්භ කරන්න. අවශ්‍යතා පැන නගින විට මහජනතාව දෙසට ප්‍රගතියක් ලබා දෙන්න.

නිරාවරණ සාමාජිකයන් ඔබ නියෝජනය තේරීම් හෝ වියුක්ත තේරීම් නිරාවරණය කරන්නේ දැයි ඔබෙන්ම අසන්න. පළමුවැන්න ඔබට වළක්වා ගත යුතු දෙයක් වන බැවින් එය නිරීක්ෂණය කළ හැකි හැසිරීමට වඩා සැබෑ නිරූපණය මත බොහෝ යැපීම් හඳුන්වා දෙනු ඇත.

සාමාන්‍ය රීතියක් ලෙස මම උප පංතිය මගින් ක්‍රමවේදය ක්‍රියාත්මක කිරීම ඉක්මවා යාමෙන් වැළකී සිටිමි. තර්කනය ඉස්කුරුප්පු කිරීම පහසු නැත. ඔබ එය අභිබවා යාමට අදහස් කරන්නේ නම් වියුක්ත ආරක්ෂිත ක්‍රම ප්‍රකාශ කරන්න.

තවද, ඔබ ප්‍රතික්‍රියා කරන විට දේවල් කැඩී යාමෙන් වළක්වා ගැනීම සඳහා අතිච්ඡාදනය වන විට ver ඕවර්රයිඩ් විවරණය භාවිතා කරන්න.


3
Uch රුචිර්බාරෝනියා, "world" = යෙදුමේ ඇති සියලුම කේත, එය කොතැනක සිටියත්.
ඇන්ඩ්‍රෙජ්

116

එය සරල ජාලක දර්ශනයකට වඩා ටිකක් සංකීර්ණයි. ප්‍රවේශය අවසර දී ඇත්දැයි ජාලකය ඔබට කියයි, නමුත් හරියටම ප්‍රවේශය යනු කුමක්ද? එසේම, ප්‍රවේශ මට්ටම් කැදැලි පංති හා උරුමය සමඟ සංකීර්ණ ආකාරවලින් අන්තර්ක්‍රියා කරයි.

"පෙරනිමි" ප්‍රවේශය (යතුරු පදයක් නොමැති වීමෙන් නියම කර ඇත) පැකේජය-පුද්ගලික ලෙසද හැඳින්වේ . ව්‍යතිරේකය: අතුරුමුහුණතක, කිසිදු වෙනස් කිරීමක් යනු මහජන ප්‍රවේශය නොවේ; මහජනයා හැර වෙනත් වෙනස් කිරීම් තහනම්ය. එනූම් නියතයන් සැමවිටම පොදු වේ.

සාරාංශය

මෙම ප්‍රවේශ පිරිවිතර සහිත සාමාජිකයෙකුට ප්‍රවේශ වීමට අවසර තිබේද?

  • සාමාජිකයා private: ඇමතුම් කේතය ලෙස එකම පන්තිය තුළ සාමාජිකයා අර්ථ දක්වා ඇත්නම් පමණි.
  • සාමාජිකයා පැකේජය පුද්ගලිකයි: ඇමතුම් කේතය සාමාජිකයාගේ වහාම ඇතුළත් කර ඇති පැකේජය තුළ තිබේ නම් පමණි.
  • සාමාජිකයා protected: එකම පැකේජයක්, නැතහොත් ඇමතුම් කේතය අඩංගු පන්තියේ සුපිරි පන්තියක සාමාජිකයා අර්ථ දක්වා ඇත්නම්.
  • සාමාජිකයා public: ඔව්.

අදාළ වන ප්‍රවේශ පිරිවිතර

දේශීය විචල්‍යයන්ට සහ විධිමත් පරාමිතීන්ට ප්‍රවේශ පිරිවිතරයන් ගත නොහැක. විෂය පථ නීතිරීතිවලට අනුව ඒවා පිටතින් ආවේනිකව ප්‍රවේශ විය නොහැකි බැවින් ඒවා effectively ලදායී ලෙස පුද්ගලික වේ.

ඉහළ විෂය පථයේ පන්ති සඳහා, publicඅවසර දී ඇත්තේ පැකේජ-පුද්ගලික පමණි . නිසා අනුමාන මෙම නිර්මාණ තේරීම වේ protectedහා privateපැකේජය මට්ටමින් අතිරික්ත වනු ඇත (පැකේජ කිසි උරුමයක් නැත).

සියලුම ප්‍රවේශ පිරිවිතර පංති සාමාජිකයින්ට (ඉදිකිරීම්කරුවන්, ක්‍රම සහ ස්ථිතික සාමාජික කාර්යයන්, කැදැලි පන්ති) කළ හැකිය.

ආශ්‍රිත: ජාවා පන්තියේ ප්‍රවේශ්‍යතාව

නියෝග

ප්රවේශ පිරිවිතරයන් දැඩි ලෙස ඇණවුම් කළ හැකිය

public> ආරක්ෂිත> පැකේජය-පුද්ගලික> පුද්ගලික

publicවඩාත්ම ප්‍රවේශය සපයන අර්ථය , privateඅවම. පුද්ගලික සාමාජිකයෙකුට කළ හැකි ඕනෑම සඳහනක් පැකේජ-පෞද්ගලික සාමාජිකයෙකු සඳහා වලංගු වේ; පැකේජ-පෞද්ගලික සාමාජිකයෙකු පිළිබඳ ඕනෑම සඳහනක් ආරක්‍ෂිත සාමාජිකයෙකුට වලංගු වේ. (එකම පැකේජයේ ආරක්ෂිත සාමාජිකයින්ට වෙනත් පංතිවලට ප්‍රවේශය ලබා දීම වැරැද්දක් ලෙස සලකනු ලැබීය.)

සටහන්

  • ඒ පන්තියේ ක්රම ඇත එම පන්තියේ වෙනත් වස්තූන් පෞද්ගලික සාමාජිකයන් වෙත ප්රවේශ වීමට ඉඩ දුන්නා. වඩාත් නිවැරදිව, සී පන්තියේ ක්‍රමයකට සී හි ඕනෑම උප පංතියක වස්තූන් මත සී හි පුද්ගලික සාමාජිකයින්ට ප්‍රවේශ විය හැකිය. උදාහරණ ලෙස ප්‍රවේශය සීමා කිරීමට ජාවා සහාය නොදක්වයි. (Scala සමඟ සසඳන්න, එය භාවිතයට සහාය private[this]වේ.)
  • වස්තුවක් තැනීම සඳහා ඔබට ඉදිකිරීම්කරුවෙකුට ප්‍රවේශය අවශ්‍ය වේ. මේ අනුව සියලුම ඉදිකිරීම්කරුවන් පුද්ගලික නම්, පන්තිය ගොඩනගා ගත හැක්කේ පන්තිය තුළ ඇති කේත ජීවත්වීමෙන් පමණි (සාමාන්‍යයෙන් ස්ථිතික කර්මාන්තශාලා ක්‍රම හෝ ස්ථිතික විචල්‍ය ආරම්භක). ඒ හා සමානව පැකේජ-පෞද්ගලික හෝ ආරක්ෂිත ඉදිකිරීම්කරුවන් සඳහා.
    • පුද්ගලික ඉදිකිරීම්කරුවන් සිටීම පමණක් යන්නෙන් අදහස් වන්නේ පංතිය බාහිරව උප වර්ගීකරණය කළ නොහැකි බවයි, මන්ද ජාවාට උප පංතියේ ඉදිකිරීම්කරුවන්ට සුපිරි පන්තියේ ඉදිකිරීම්කරුවෙකු ව්‍යංගයෙන් හෝ පැහැදිලිව ඇමතීමට අවශ්‍ය වේ. (කෙසේ වෙතත්, එය උප කාණ්ඩයට අයත් කැදැලි පන්තියක් අඩංගු විය හැකිය.)

අභ්‍යන්තර පන්ති

අභ්‍යන්තර පංති වැනි කැදැලි විෂය පථයන් ද ඔබ සලකා බැලිය යුතුය. සංකීර්ණත්වයට නිදසුනක් නම්, අභ්‍යන්තර පංතිවල සාමාජිකයන් සිටින අතර, ඒවාට ප්‍රවේශ විකරණකාරක ගත හැකිය. එබැවින් ඔබට මහජන සාමාජිකයෙකු සමඟ පුද්ගලික අභ්‍යන්තර පන්තියක් තිබිය හැකිය; සාමාජිකයාට ප්‍රවේශ විය හැකිද? (පහත බලන්න.) සාමාන්‍ය රීතිය වන්නේ විෂය පථය දෙස බැලීම සහ ඔබට එක් එක් මට්ටමට ප්‍රවේශ විය හැකිදැයි බැලීමට පුනරාවර්තනය වීමයි.

කෙසේ වෙතත්, මෙය තරමක් සංකීර්ණ වන අතර, සම්පූර්ණ විස්තර සඳහා, ජාවා භාෂා පිරිවිතර බලන්න . (ඔව්, අතීතයේ දී සම්පාදක දෝෂ තිබේ.)

මේවා අන්තර්ක්‍රියා කරන ආකාරය පිළිබඳ රසයක් සඳහා, මෙම උදාහරණය සලකා බලන්න. පුද්ගලික අභ්‍යන්තර පංති "කාන්දු" කළ හැකිය; මෙය සාමාන්‍යයෙන් අනතුරු ඇඟවීමකි:

class Test {
    public static void main(final String ... args) {
        System.out.println(Example.leakPrivateClass()); // OK
        Example.leakPrivateClass().secretMethod(); // error
    }
}

class Example {
    private static class NestedClass {
        public void secretMethod() {
            System.out.println("Hello");
        }
    }
    public static NestedClass leakPrivateClass() {
        return new NestedClass();
    }
}

සම්පාදක ප්‍රතිදානය:

Test.java:4: secretMethod() in Example.NestedClass is defined in an inaccessible class or interface
        Example.leakPrivateClass().secretMethod(); // error
                                  ^
1 error

අදාළ ප්‍රශ්න කිහිපයක්:


1
"පොදු හැර වෙනත් වෙනස් කිරීම් තහනම්" - ජාවා 9 වන විට මෙය තවදුරටත් එසේ නොවේ: අතුරුමුහුණත් සඳහා පුද්ගලික ක්‍රම තිබිය හැකිය.
එම්සී අධිරාජ්‍යයා

96

රීතියක් ලෙස:

  • private: පන්ති විෂය පථය.
  • default(හෝ package-private): පැකේජ විෂය පථය.
  • protected: package scope + child(පැකේජය වැනි, නමුත් අපට එය විවිධ පැකේජ වලින් උපවර්ග කළ හැකිය). ආරක්ෂිත විකරණකාරකය සෑම විටම "දෙමාපිය-දරුවා" සම්බන්ධතාවය තබා ගනී.
  • public: සෑම තැනකම.

එහි ප්‍රති As ලයක් වශයෙන්, අපි ප්‍රවේශය අයිතිවාසිකම් තුනකට බෙදුවහොත්:

  • ()) Irect ජු වීම (එකම පන්තිය තුළ ඇති ක්‍රමයකින් හෝ "මෙම" වාක්‍ය ඛණ්ඩය හරහා).
  • (R) eference (පංතියට යොමු කිරීමක් භාවිතා කරන ක්‍රමයක් හෝ "dot" සින්ටැක්ස් හරහා).
  • (I) උරුමය (උප කාණ්ඩය හරහා).

එවිට අපට මෙම සරල වගුව ඇත:

+—-———————————————+————————————+———————————+
|                 |    Same    | Different |
|                 |   Package  | Packages  |
+—————————————————+————————————+———————————+
| private         |   D        |           |
+—————————————————+————————————+———————————+
| package-private |            |           |
| (no modifier)   |   D R I    |           |
+—————————————————+————————————+———————————+
| protected       |   D R I    |       I   |
+—————————————————+————————————+———————————+
| public          |   D R I    |    R  I   |
+—————————————————+————————————+———————————+

54

ඉතා කෙටියෙන්

  • public: සෑම තැනකින්ම ප්‍රවේශ විය හැකිය.
  • protected: එකම පැකේජයක පන්ති සහ ඕනෑම පැකේජයක වාසය කරන උප පංති වලට ප්‍රවේශ විය හැකිය.
  • පෙරනිමිය (නවීකරණයක් දක්වා නැත): එකම පැකේජයේ පන්ති වලට ප්‍රවේශ විය හැකිය.
  • private: එකම පන්තියකට පමණක් ප්‍රවේශ විය හැකිය.

48

ජාවා හි වඩාත්ම වරදවා වටහාගෙන ඇති ප්‍රවේශ විකරණකාරකය වේ protected. උප පංතිවලට එය දැකිය හැකි එක් ව්‍යතිරේකයක් සහිත පෙරනිමි විකරණකාරකයට එය සමාන බව අපි දනිමු. නමුත් කෙසේද? ව්‍යාකූලත්වය පැහැදිලි කරන උදාහරණයක් මෙන්න:

  • අපට පන්ති 2 ක් ඇතැයි උපකල්පනය කරන්න; Fatherසහ Son, එක් එක් එහි පැකේජයේ:

    package fatherpackage;
    
    public class Father
    {
    
    }
    
    -------------------------------------------
    
    package sonpackage;
    
    public class Son extends Father
    {
    
    }
  • ගේ ආරක්ෂිත ක්රමය එකතු කරමු foo()කිරීමට Father.

    package fatherpackage;
    
    public class Father
    {
        protected void foo(){}
    }
  • මෙම ක්‍රමය foo()සන්දර්භ 4 කින් හැඳින්විය හැකිය:

    1. foo()නිර්වචනය කර ඇති එකම පැකේජයක පිහිටා ඇති පන්තියක් ඇතුළත ( fatherpackage):

      package fatherpackage;
      
      public class SomeClass
      {
          public void someMethod(Father f, Son s)
          {
              f.foo();
              s.foo();
          }
      }
    2. උප පංතියක් ඇතුළත, වර්තමාන අවස්ථාව හරහා thisහෝ super:

      package sonpackage;
      
      public class Son extends Father
      {
          public void sonMethod()
          {
              this.foo();
              super.foo();
          }
      }
    3. එකම පන්තියේ වර්ගය කුමක්ද?

      package fatherpackage;
      
      public class Father
      {
          public void fatherMethod(Father f)
          {
              f.foo(); // valid even if foo() is private
          }
      }
      
      -------------------------------------------
      
      package sonpackage;
      
      public class Son extends Father
      {
          public void sonMethod(Son s)
          {
              s.foo();
          }
      }
    4. කාගේ වර්ගය මව් පන්ති වන අතර එය කිසියම් සඳහනක් මත ඇතුළත එහිදී පැකේජය foo()අර්ථ දක්වා ඇත ( fatherpackage) [මෙම සන්දර්භය කිසිදු තුළ ඇතුළත් කළ හැකිය. 1]:

      package fatherpackage;
      
      public class Son extends Father
      {
          public void sonMethod(Father f)
          {
              f.foo();
          }
      }
  • පහත සඳහන් තත්වයන් වලංගු නොවේ.

    1. මව් පංතිය කාගේ වර්ගයක්ද යන්න සහ එය අර්ථ දක්වා ඇති පැකේජයෙන් පිටත ඇති foo()යොමුවක ( fatherpackage):

      package sonpackage;
      
      public class Son extends Father
      {
          public void sonMethod(Father f)
          {
              f.foo(); // compilation error
          }
      }
    2. උප පංතියක පැකේජයක් තුළ ඇති උප පංතියක් නොවන (උප පංතියක් ආරක්ෂිත සාමාජිකයින්ට එහි මවුපියන්ගෙන් උරුම වන අතර, එමඟින් ඔවුන් උප පංති නොවන අයට පුද්ගලික කරයි):

      package sonpackage;
      
      public class SomeClass
      {
          public void someMethod(Son s) throws Exception
          {
              s.foo(); // compilation error
          }
      }

Object#clone()protectedසාමාජිකයෙකුගේ උදාහරණයකි .
Eng.Fouad

කිරීම super.foo()සහ පළමු අවලංගු තත්වය අතර වෙනස f.foo()කුමක්ද?
cst1992

1
st cst1992 එය අවුල් සහගත නමුත් ජාවා භාෂා පිරිවිතර 6.6.2 බලන්න: "වස්තුවක ආරක්ෂිත සාමාජිකයෙකුට හෝ ඉදිකිරීම්කරුවෙකුට පැකේජයෙන් පිටත සිට ප්‍රවේශ විය හැකි අතර එය ප්‍රකාශයට පත් කරනු ලබන්නේ එම වස්තුව ක්‍රියාත්මක කිරීමට වගකිව යුතු කේතයෙන් පමණි". Super.foo () සමඟ “සුපර්” යොමුව “ක්‍රියාත්මක කිරීම සඳහා සෘජුවම වගකිව යුතු” නමුත් “f” යොමුව එසේ නොවේ. මන්ද? "සුපිරි" යනු පියාගේ වර්ගයට අයත් බව ඔබට 100% ක් විශ්වාස කළ හැකි නමුත් "f" සඳහා නොවේ; ධාවන වේලාවේදී එය වෙනත් උප වර්ගයක පියා විය හැකිය. Docs.oracle.com/javase/specs/jls/se9/html/…
skomisa

1
තේරුම් ගත් අයෙකුගෙන් පිළිතුරක් කියවීම ප්‍රබෝධවත් කරයි protected. අවාසනාවට, මෙම පිටුවෙහි අර්ථ දක්වන අනෙක් සියලුම පිළිතුරු protectedටිකක් වැරදියි.
ඩාවුඩ් ඉබ්න් කරීම්

30

පුද්ගලික

  • ක්‍රම, විචල්‍යයන් සහ ඉදිකිරීම්කරුවන්

පුද්ගලිකව ප්‍රකාශයට පත් කරන ක්‍රම, විචල්‍යයන් සහ ඉදිකිරීම්කරුවන්ට ප්‍රවේශ විය හැක්කේ ප්‍රකාශිත පන්තිය තුළම පමණි.

  • පන්තිය සහ අතුරුමුහුණත

පුද්ගලික ප්‍රවේශ විකරණකාරකය වඩාත්ම සීමාකාරී ප්‍රවේශ මට්ටමයි. පන්ති සහ අතුරුමුහුණත් පුද්ගලික විය නොහැක.

සටහන

පංතියේ මහජන ලබා ගැනීමේ ක්‍රම තිබේ නම් පුද්ගලික යැයි ප්‍රකාශ කරන විචල්‍යයන් පන්තියෙන් පිටත ප්‍රවේශ විය හැකිය. සුපිරි පන්තියක ආරක්‍ෂිත යැයි ප්‍රකාශයට පත් කර ඇති විචල්‍යයන්, ක්‍රම සහ ඉදිකිරීම්කරුවන්ට ප්‍රවේශ විය හැක්කේ වෙනත් පැකේජවල ඇති උප පංතිවලට හෝ ආරක්ෂිත සාමාජික පන්තියේ පැකේජය තුළ ඇති ඕනෑම පන්තියකට පමණි.


ආරක්ෂිතයි

  • පන්තිය සහ අතුරුමුහුණත

ආරක්ෂිත ප්‍රවේශ විකරණකාරකය පන්ති සහ අතුරුමුහුණත් සඳහා යෙදිය නොහැක.

ක්‍රම, ක්ෂේත්‍ර ආරක්ෂිත යැයි ප්‍රකාශ කළ හැකි නමුත් අතුරු මුහුණතක ඇති ක්‍රම සහ ක්ෂේත්‍ර ආරක්ෂිත යැයි ප්‍රකාශ කළ නොහැක.

සටහන

ආරක්ෂිත ප්‍රවේශය උප පංතියට සහායක ක්‍රමය හෝ විචල්‍යය භාවිතා කිරීමට අවස්ථාවක් ලබා දෙන අතර, සම්බන්ධයක් නැති පන්තියක් එය භාවිතා කිරීමට උත්සාහ කිරීම වළක්වයි.


මහජන

ප්‍රකාශයට පත් කරන ලද පංතියක්, ක්‍රමයක්, ඉදිකිරීම්කරුවෙකු, අතුරුමුහුණතක් යනාදිය වෙනත් ඕනෑම පන්තියකින් ලබා ගත හැකිය.

එබැවින් පොදු පන්තියක් තුළ ප්‍රකාශිත ක්ෂේත්‍ර, ක්‍රම, කුට්ටි ජාවා විශ්වයට අයත් ඕනෑම පන්තියකින් ලබා ගත හැකිය.

  • විවිධ පැකේජ

කෙසේ වෙතත් අප ප්‍රවේශ වීමට උත්සාහ කරන පොදු පන්තිය වෙනත් පැකේජයක තිබේ නම්, පොදු පන්තිය තවමත් ආනයනය කළ යුතුය.

පංති උරුමය නිසා, පන්තියක සියලුම පොදු ක්‍රම සහ විචල්‍යයන් එහි උප පංති මගින් උරුම වේ.


පෙරනිමිය - යතුරු පදයක් නැත:

පෙරනිමි ප්‍රවේශ විකරණකාරකය යනු පංතියක්, ක්ෂේත්‍රයක්, ක්‍රමයක් යනාදිය සඳහා අපි ප්‍රවේශ විකරණකාරකයක් පැහැදිලිව ප්‍රකාශ නොකරන බවයි.

  • එකම පැකේජ තුළ

කිසිදු ප්‍රවේශ පාලක විකරණකාරකයක් නොමැතිව ප්‍රකාශිත විචල්‍යයක් හෝ ක්‍රමයක් එකම පැකේජයේ වෙනත් ඕනෑම පන්තියකට ලබා ගත හැකිය. අතුරුමුහුණතක ඇති ක්ෂේත්‍ර ව්‍යංගයෙන් පොදු ස්ථිතික අවසාන වන අතර අතුරු මුහුණතක ක්‍රම පෙරනිමියෙන් පොදු වේ.

සටහන

අපට ස්ථිතික ක්ෂේත්‍ර අභිබවා යා නොහැක. ඔබ එය ඉක්මවා යාමට උත්සාහ කළහොත් කිසිදු දෝෂයක් නොපෙන්වයි, නමුත් එය අප හැර වෙනත් දේ ක්‍රියා නොකරයි.

අදාළ පිළිතුරු

යොමු සබැඳි

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html http://www.tutorialspoint.com/java/java_access_modifiers.htm


21

දැනටමත් සපයා ඇති සබැඳිවල වෙනස සොයාගත හැකි නමුත් සාමාන්‍යයෙන් භාවිතා කළ යුත්තේ "අවම දැනුමේ මූලධර්මය" වෙතට ය. අවශ්‍ය අවම දෘශ්‍යතාවයට පමණක් ඉඩ දෙන්න.


20

පුද්ගලික : පන්තියට පමණක් සීමිත ප්‍රවේශයක්

පෙරනිමි (නවීකරණයක් නොමැත) : පන්තියට සහ පැකේජයට සීමිත ප්‍රවේශයක්

ආරක්ෂිතයි : පංතිය, පැකේජය සහ උප පංති සඳහා සීමිත ප්‍රවේශය (පැකේජයේ ඇතුළත හා පිටත)

පොදු : පංතිය, පැකේජය (සියල්ල) සහ උප පංති වලට ප්‍රවේශ විය හැකිය ... කෙටියෙන් කිවහොත්, සෑම තැනකම.


17

මට්ටම් කිහිපයක ප්‍රවේශය සීමා කිරීම සඳහා ප්‍රවේශ විකරණකාරක ඇත.

මහජන: එය එකම පැකේජයක තිබුණත් නැතත් ඕනෑම පන්තියකින් ප්‍රවේශ විය හැකි තරම් සරල ය.

ඔබ එකම පැකේජයක සිටී නම් ප්‍රවේශ වීමට ඔබට කෙලින්ම පිවිසිය හැකිය, නමුත් ඔබ වෙනත් පැකේජයක සිටී නම් ඔබට පන්තියේ වස්තුවක් නිර්මාණය කළ හැකිය.

පෙරනිමිය: ඕනෑම පැකේජයකින් එකම පැකේජයකින් ප්‍රවේශ විය හැකිය.

ප්‍රවේශ වීමට ඔබට පන්තියේ වස්තුවක් නිර්මාණය කළ හැකිය. නමුත් ඔබට මෙම විචල්‍යයට පැකේජයෙන් පිටත ප්‍රවේශ විය නොහැක.

ආරක්ෂිතයි: ඔබට එකම පැකේජයක මෙන්ම වෙනත් ඕනෑම පැකේජයක උප පංතියේ විචල්‍යයන්ට ප්‍රවේශ විය හැකිය. එබැවින් මූලික වශයෙන් එය පෙරනිමි + උරුම වූ හැසිරීමකි.

මූලික පන්තියේ අර්ථ දක්වා ඇති ආරක්ෂිත ක්ෂේත්‍රයට ප්‍රවේශ වීම සඳහා ඔබට ළමා පන්තියේ වස්තුවක් නිර්මාණය කළ හැකිය.

පුද්ගලික: එය එකම පන්තියකට ප්‍රවේශ විය හැකිය.

ස්ථිතික නොවන ක්‍රම වලදී ඔබට මෙම යොමු කිරීම නිසා සෘජුවම ප්‍රවේශ විය හැකිය (ඉදිකිරීම්කරුවන් තුළද) නමුත් ස්ථිතික ක්‍රමවලට ප්‍රවේශ වීමට ඔබට පන්තියේ වස්තුවක් නිර්මාණය කළ යුතුය.


16

ජාවා හි විකරණකාරක වෙත පිවිසෙන්න.

ජාවා හි ප්‍රවේශ පාලනය සැපයීම සඳහා ජාවා ප්‍රවේශ විකරණකාරක භාවිතා කරයි.

1. පෙරනිමි:

එකම පැකේජයක පමණක් පන්ති වලට ප්‍රවේශ විය හැකිය.

උදාහරණයක් වශයෙන්,

// Saved in file A.java
package pack;

class A{
  void msg(){System.out.println("Hello");}
}

// Saved in file B.java
package mypack;
import pack.*;

class B{
  public static void main(String args[]){
   A obj = new A(); // Compile Time Error
   obj.msg(); // Compile Time Error
  }
}

මෙම ප්‍රවේශය පොදු සහ ආරක්‍ෂිත ඒවාට වඩා සීමා කර ඇති නමුත් පුද්ගලිකත්වයට වඩා අඩුය.

2. මහජන

ඕනෑම තැනක සිට පිවිසිය හැකිය. (ගෝලීය ප්‍රවේශය)

උදාහරණයක් වශයෙන්,

// Saved in file A.java

package pack;
public class A{
  public void msg(){System.out.println("Hello");}
}

// Saved in file B.java

package mypack;
import pack.*;

class B{
  public static void main(String args[]){
    A obj = new A();
    obj.msg();
  }
}

ප්‍රතිදානය: හෙලෝ

3. පුද්ගලික

ප්‍රවේශ විය හැක්කේ එකම පන්තිය තුළ පමණි.

ඔබ එක් පන්තියක තවත් පන්තියක පුද්ගලික සාමාජිකයින්ට ප්‍රවේශ වීමට උත්සාහ කළහොත් එය සම්පාදනය කිරීමේ දෝෂයකි. උදාහරණයක් වශයෙන්,

class A{
  private int data = 40;
  private void msg(){System.out.println("Hello java");}
}

public class Simple{
  public static void main(String args[]){
    A obj = new A();
    System.out.println(obj.data); // Compile Time Error
    obj.msg(); // Compile Time Error
  }
}

4. ආරක්ෂිතයි

එකම පැකේජයේ සහ උප පංති වලට පමණක් ප්‍රවේශ විය හැකිය

උදාහරණයක් වශයෙන්,

// Saved in file A.java
package pack;
public class A{
  protected void msg(){System.out.println("Hello");}
}

// Saved in file B.java
package mypack;
import pack.*;

class B extends A{
  public static void main(String args[]){
    B obj = new B();
    obj.msg();
  }
}

ප්‍රතිදානය: හෙලෝ

රූප විස්තරය මෙහි ඇතුළත් කරන්න


14
  • පොදු - යෙදුමේ ඕනෑම තැනක සිට ප්‍රවේශ විය හැකිය.

  • පෙරනිමි - පැකේජයෙන් ප්‍රවේශ විය හැකිය.

  • ආරක්ෂිතයි - වෙනත් පැකේජවල පැකේජයෙන් සහ උප පංති වලින් ප්‍රවේශ විය හැකිය. එසේම

  • පුද්ගලික - ප්‍රවේශ විය හැක්කේ එහි පන්තියෙන් පමණි.


14

පැකේජයට පෙනේ. පෙරනිමිය. විකරණකාරක අවශ්‍ය නොවේ.

පන්තියට පමණක් පෙනේ ( පුද්ගලික ).

ලෝකයට දෘශ්‍යමාන වේ ( පොදු ).

මෙම පැකේජය සහ සියලු උප වර්ගිකරණයන් (දර්ශනය ආරක්ෂා ).

විචල්‍යයන් සහ ක්‍රමවේදයන් කිසිදු වෙනස් කිරීමකින් තොරව ප්‍රකාශයට පත් කළ හැකිය. පෙරනිමි උදාහරණ:

String name = "john";

public int age(){
    return age;
}

පුද්ගලික ප්‍රවේශ විකරණකාරකය - පුද්ගලික:

පුද්ගලිකව ප්‍රකාශයට පත් කරන ක්‍රම, විචල්‍යයන් සහ ඉදිකිරීම්කරුවන්ට ප්‍රවේශ විය හැක්කේ ප්‍රකාශිත පන්තිය තුළම පමණි. පුද්ගලික ප්‍රවේශ විකරණකාරකය වඩාත්ම සීමාකාරී ප්‍රවේශ මට්ටමයි. පන්ති සහ අතුරුමුහුණත් පුද්ගලික විය නොහැක.

පංතියේ මහජන ලබා ගැනීමේ ක්‍රම තිබේ නම් පුද්ගලික යැයි ප්‍රකාශ කරන විචල්‍යයන් පන්තියෙන් පිටත ප්‍රවේශ විය හැකිය.

පුද්ගලික විකරණකාරකය භාවිතා කිරීම යනු වස්තුවක් තමන් වටා ගමන් කර බාහිර ලෝකයෙන් දත්ත සඟවන ප්‍රධාන ක්‍රමයයි.

උදාහරණ:

Public class Details{

    private String name;

    public void setName(String n){
        this.name = n;
    }

    public String getName(){
        return this.name;
    }
}

පොදු ප්‍රවේශ විකරණකාරකය - පොදු:

ප්‍රකාශයට පත් කරන ලද පංතියක්, ක්‍රමයක්, ඉදිකිරීම්කරුවෙකු, අතුරුමුහුණතක් යනාදිය වෙනත් ඕනෑම පන්තියකින් ලබා ගත හැකිය. එබැවින් පොදු පන්තියක් තුළ ප්‍රකාශයට පත් කරන ලද ක්ෂේත්‍ර, ක්‍රම, කුට්ටි ජාවා විශ්වයට අයත් ඕනෑම පන්තියකින් ලබා ගත හැකිය.

කෙසේ වෙතත්, අප ප්‍රවේශ වීමට උත්සාහ කරන පොදු පන්තිය වෙනත් පැකේජයක තිබේ නම්, පොදු පන්තිය තවමත් ආනයනය කළ යුතුය.

පංති උරුමය නිසා, පන්තියක සියලුම පොදු ක්‍රම සහ විචල්‍යයන් එහි උප පංති මගින් උරුම වේ.

උදාහරණයක්:

public void cal(){

}

ආරක්ෂිත ප්‍රවේශ විකරණකාරකය - ආරක්ෂිත:

සුපිරි පන්තියක ආරක්‍ෂිත යැයි ප්‍රකාශයට පත් කර ඇති විචල්‍යයන්, ක්‍රම සහ ඉදිකිරීම්කරුවන්ට ප්‍රවේශ විය හැක්කේ වෙනත් පැකේජයක ඇති උප පංතිවලට හෝ ආරක්ෂිත සාමාජික පන්තියේ පැකේජය තුළ ඇති ඕනෑම පන්තියකට පමණි.

ආරක්ෂිත ප්‍රවේශ විකරණකාරකය පන්ති සහ අතුරුමුහුණත් සඳහා යෙදිය නොහැක. ක්‍රම, ක්ෂේත්‍ර ආරක්ෂිත යැයි ප්‍රකාශ කළ හැකි නමුත් අතුරු මුහුණතක ඇති ක්‍රම සහ ක්ෂේත්‍ර ආරක්ෂිත යැයි ප්‍රකාශ කළ නොහැක.

ආරක්ෂිත ප්‍රවේශය උප පංතියට සහායක ක්‍රමය හෝ විචල්‍යය භාවිතා කිරීමට අවස්ථාවක් ලබා දෙන අතර, සම්බන්ධයක් නැති පන්තියක් එය භාවිතා කිරීමට උත්සාහ කිරීම වළක්වයි.

class Van{

    protected boolean speed(){

    }
}

class Car{
    boolean speed(){
    }

}

12

මෙම පිටුව ආරක්ෂිත සහ පෙරනිමි ප්‍රවේශ විකරණකාරකය ගැන හොඳින් ලියයි

.... ආරක්ෂිත: ආරක්ෂිත ප්‍රවේශ විකරණකාරකය ටිකක් උපක්‍රමශීලී වන අතර පෙරනිමි ප්‍රවේශ විකරණකාරකයේ සුපර්සෙට් එකක් යැයි ඔබට පැවසිය හැකිය. එකම පැකේජයක ප්‍රවේශය ගැන සැලකිලිමත් වන තාක් දුරට ආරක්ෂිත සාමාජිකයන් පෙරනිමි සාමාජිකයින්ට සමාන වේ. වෙනස නම්, මව් පංතිය පවතින පැකේජයෙන් පිටත සාමාජිකයා ප්‍රකාශයට පත් කරන ලද පංතියේ උප පංතිවලට ආරක්ෂිත සාමාජිකයින්ට ප්‍රවේශ විය හැකි වීමයි.

නමුත් මෙම ආරක්ෂිත සාමාජිකයින්ට “පැකේජයෙන් පිටත ප්‍රවේශ විය හැක්කේ උරුමය හරහා පමණි”. එනම්, ඔබට පන්තියේ ආරක්ෂිත සාමාජිකයෙකුට එහි උප පංතියේ වෙනත් පැකේජයක් තුළ කෙලින්ම සාමාජිකයා උප පංතියේම සිටින ලෙසට ප්‍රවේශ විය හැකිය. නමුත් එම ආරක්ෂිත සාමාජිකයාට මව් පන්තියේ යොමු කිරීම මඟින් පැකේජයෙන් පිටත උප පංතියට ප්‍රවේශ විය නොහැක. ....


මෙය එකතු කිරීම සඳහා "දරුවාට මව් පන්තියේ ආරක්ෂිත සාමාජිකයාට ප්‍රවේශය ලැබුනු පසු, එය පුද්ගලික බවට පත්වේ (නැතහොත් උප පංතියේ උප පංති මගින් උරුම කර ගත හැකි විශේෂ පෞද්ගලික සාමාජිකයෙකු යැයි මම කියමි)."
ආනන්ද්

9

ඩේවිඩ්ගේ පිළිතුර එක් එක් ප්‍රවේශ විකරණකාරකයේ අර්ථය සපයයි. සෑම එකක්ම භාවිතා කළ යුත්තේ කවදාද යන්න, මම යෝජනා කරන්නේ සියලුම පන්ති සහ බාහිර භාවිතය සඳහා අදහස් කරන එක් එක් පන්තියේ ක්‍රමවේදයන් (එහි API) සහ අනෙක් සියල්ල පෞද්ගලිකව ප්‍රකාශයට පත් කිරීමටයි.

කාලයාගේ ඇවෑමෙන් ඔබ සමහර පන්ති පැකේජ-පුද්ගලික කරන්නේ කවදාද සහ උප පංතිවල භාවිතය සඳහා ආරක්‍ෂිත ඇතැම් ක්‍රම ප්‍රකාශ කරන්නේ කවදාද යන්න පිළිබඳ හැඟීමක් ඔබ තුළ ඇති වේ.


6

සටහන: මෙය පිළිගත් පිළිතුර සඳහා අතිරේකයක් පමණි .

මෙය ජාවා ප්‍රවේශ විකරණකාරක හා සම්බන්ධ වේ .

සිට ජාවා ප්රවේශ අකුරු :

ජාවා ප්‍රවේශ විකරණකාරකයක් මඟින් ලබා දී ඇති පන්තියට ප්‍රවේශ විය හැකි පන්ති සහ එහි ක්ෂේත්‍ර, ඉදිකිරීම්කරුවන් සහ ක්‍රම නියම කරයි. පංතියක්, එහි ඉදිකිරීම්කරුවන්, ක්ෂේත්‍ර සහ ක්‍රම සඳහා ප්‍රවේශ වෙනස් කිරීම් වෙන වෙනම නියම කළ හැකිය. ජාවා ප්‍රවේශ විකරණකාරක සමහර විට දෛනික කථාවේදී ජාවා ප්‍රවේශ පිරිවිතර ලෙස හඳුන්වනු ලැබේ, නමුත් නිවැරදි නම ජාවා ප්‍රවේශ විකරණකාරක වේ. පංති, ක්ෂේත්‍ර, ඉදිකිරීම්කරුවන් සහ ක්‍රම එකිනෙකට වෙනස් ජාවා ප්‍රවේශ විකරණකාරක හතරෙන් එකක් තිබිය හැකිය:

  • ලැයිස්තු අයිතමය
  • පුද්ගලික
  • පෙරනිමි (පැකේජය)
  • ආරක්ෂිතයි
  • මහජන

පංති නිබන්ධනයක සාමාජිකයින්ට ප්‍රවේශය පාලනය කිරීමේ සිට :

ප්‍රවේශ මට්ටමේ විකරණකාරක මගින් වෙනත් පංතිවලට විශේෂිත ක්ෂේත්‍රයක් භාවිතා කළ හැකිද යන්න හෝ විශේෂිත ක්‍රමවේදයක් භාවිතා කළ හැකිද යන්න තීරණය කරයි. ප්රවේශ පාලනයේ මට්ටම් දෙකක් තිබේ:

  • ඉහළ මට්ටමේ - පොදු, හෝ පැකේජ-පෞද්ගලික (පැහැදිලි විකරණකාරකයක් නොමැත).
  • සාමාජික මට්ටමින් - පොදු, පෞද්ගලික, ආරක්ෂිත හෝ පැකේජ-පෞද්ගලික (පැහැදිලි විකරණකාරකයක් නොමැත).

නවීකරණ මහජනතාව සමඟ පන්තියක් ප්‍රකාශයට පත් කළ හැකි අතර, එම පන්තිය සෑම තැනකම සෑම පන්තියකටම දැකිය හැකිය. පංතියකට විකරණකාරකයක් නොමැති නම් (පෙරනිමිය පැකේජ-පුද්ගලික ලෙසද හැඳින්වේ), එය දෘශ්‍ය වන්නේ එහි පැකේජය තුළ පමණි

පහත දැක්වෙන වගුවේ දැක්වෙන්නේ එක් එක් විකරණකාරකය විසින් අවසර දී ඇති සාමාජිකයින්ට ප්‍රවේශ වීමයි.

╔═════════════╦═══════╦═════════╦══════════╦═══════╗
 Modifier     Class  Package  Subclass  World 
╠═════════════╬═══════╬═════════╬══════════╬═══════╣
 public       Y      Y        Y         Y     
 protected    Y      Y        Y         N     
 no modifier  Y      Y        N         N     
 private      Y      N        N         N     
╚═════════════╩═══════╩═════════╩══════════╩═══════╝

පළමු දත්ත තීරුවේ දැක්වෙන්නේ ප්‍රවේශ මට්ටමින් අර්ථ දක්වා ඇති සාමාජිකයාට පන්තියට ප්‍රවේශය තිබේද යන්නයි. ඔබට පෙනෙන පරිදි, පන්තියකට සෑම විටම එහි සාමාජිකයින්ට ප්‍රවේශය ඇත. දෙවන තීරුවේ දැක්වෙන්නේ පන්තියට සමාන පැකේජයක පන්තිවලට (ඔවුන්ගේ දෙමව්පියන් නොසලකා) සාමාජිකයාට ප්‍රවේශය තිබේද යන්නයි. තුන්වන තීරුවේ දැක්වෙන්නේ මෙම පැකේජයෙන් පිටත ප්‍රකාශයට පත් කරන ලද පන්තියේ උප පංතිවලට සාමාජිකයාට ප්‍රවේශය තිබේද යන්නයි. සිව්වන තීරුවේ දැක්වෙන්නේ සියලුම පංතිවලට සාමාජිකයාට ප්‍රවේශය තිබේද යන්නයි.

ප්‍රවේශ මට්ටම් ඔබට ආකාර දෙකකින් බලපායි. පළමුව, ඔබ ජාවා වේදිකාවේ පන්ති වැනි වෙනත් ප්‍රභවයකින් එන පන්ති භාවිතා කරන විට, ඔබේම පන්තිවල භාවිතා කළ හැකි පන්තිවල සාමාජිකයින්ට ප්‍රවේශ වීමේ මට්ටම් තීරණය කරයි. දෙවනුව, ඔබ පංතියක් ලියන විට, සෑම සාමාජික විචල්‍යයක්ම සහ ඔබේ පන්තියේ සෑම ක්‍රමයක්ම තිබිය යුතු ප්‍රවේශ මට්ටම තීරණය කළ යුතුය.


1
පරිපූරක යනු කුමක්ද? එය පවතින තනතුරට සංස්කරණයක් නොවන්නේ ඇයි?
sehe

අතිරේකය වන්නේ ප්‍රවේශ විකරණකාරක වේ. සංස්කරණය නොකරන්නේ ඇයි? පිළිගත් පිළිතුර historical තිහාසික නාමයෙන් නොවෙනස්ව තබා ගැනීම සහ මගේ පිළිතුර ලබා දීම.
ישו אוהב אותך

5

පොදු ආරක්ෂිත පෙරනිමි සහ පුද්ගලික යනු ප්‍රවේශ විකරණකාරක වේ.

ඒවා පන්තියේ අන්තර්ගතය සඟවා තැබීම හෝ සැඟවීම සහ පෙන්වීම සඳහා අදහස් කෙරේ.

  1. පන්තිය පොදු හෝ පෙරනිමි විය හැකිය
  2. පන්ති සාමාජිකයන් පොදු, ආරක්‍ෂිත, පෙරනිමි හෝ පෞද්ගලික විය හැකිය.

පංතියෙන් පිටත පුද්ගලික ප්‍රවේශ විය නොහැක පෙරනිමිය ප්‍රවේශ විය හැක්කේ පැකේජයට පමණි. පැකේජයේ මෙන්ම එය විස්තාරණය කරන ඕනෑම පන්තියකින් ආරක්ෂා කර ඇත. මහජනතාව සැමට විවෘතයි.

සාමාන්‍යයෙන් සාමාජික විචල්‍යයන් පුද්ගලිකව අර්ථ දක්වා ඇති නමුත් සාමාජික ක්‍රම පොදු වේ.


Defaultප්‍රවේශ විකරණකාරකයක් නොවන අතර අනෙක් ඒවා දෙක වැරදියට ලියා ඇත.
මාර්ක්විස් ඔෆ් ලෝර්න්

5

ඕනෑම භාෂාවක මූලික සංකල්ප මතක තබා ගැනීමෙන් සැබෑ ලෝක ප්‍රතිසමයන් නිර්මාණය කිරීමෙන් හැකි බව බොහෝ විට මම තේරුම් ගතිමි. ජාවා හි ප්‍රවේශ විකරණකාරක අවබෝධ කර ගැනීම සඳහා මගේ ප්‍රතිසමයක් මෙන්න:

ඔබ විශ්ව විද්‍යාලයක ශිෂ්‍යයෙක් යැයි සිතමු. ඔබට සති අන්තයේ ඔබ බැලීමට පැමිණෙන මිතුරෙකු සිටී. සරසවියේ නිර්මාතෘගේ විශාල පිළිමයක් කැම්පස් මැද පිහිටා ඇතැයි සිතමු.

  • ඔබ ඔහුව කැම්පස් වෙත ගෙන එන විට, ඔබ සහ ඔබේ මිතුරා දකින පළමු දෙය නම් මෙම ප්‍රතිමාවයි. මෙයින් අදහස් කරන්නේ විශ්ව විද්‍යාලයේ අවසරයකින් තොරව කැම්පස් තුළ ඇවිදින ඕනෑම කෙනෙකුට පිළිමය දෙස බැලිය හැකි බවයි. මෙය ප්‍රතිමාව PUBLIC ලෙස කරයි.

  • ඊළඟට, ඔබට අවශ්‍ය වන්නේ ඔබේ මිතුරා ඔබගේ නවාතැනට රැගෙන යාමයි, නමුත් ඒ සඳහා ඔබ ඔහුව අමුත්තෙකු ලෙස ලියාපදිංචි කළ යුතුය. මෙයින් අදහස් කරන්නේ ඔහුට කැම්පස්හි විවිධ ගොඩනැඟිලි වලට පිවිසීමට ප්‍රවේශ පත්‍රයක් (එය ඔබට සමාන) ලැබෙන බවයි. මෙමඟින් ඔහුගේ ප්‍රවේශ කාඩ්පත ආරක්ෂිතයි .

  • ඔබේ මිතුරාට කැම්පස් වයිෆයි වෙත පිවිසීමට අවශ්‍ය නමුත් එසේ කිරීමට කිසිදු අක්තපත්‍රයක් නොමැත. ඔහුට සබැඳිව පිවිසිය හැකි එකම ක්‍රමය නම් ඔබ ඔහු සමඟ ඔබේ පිවිසුම බෙදා ගන්නේ නම් පමණි. (මතක තබා ගන්න, විශ්ව විද්‍යාලයට යන සෑම සිසුවෙකුටම මෙම පිවිසුම් අක්තපත්‍ර ද ඇත). මෙය ඔබගේ පිවිසුම් අක්තපත්‍ර NO MODIFIER ලෙස සාදනු ඇත.

  • අවසාන වශයෙන්, ඔබේ මිතුරාට වෙබ් අඩවියේ පළ කර ඇති අධ්‍යයන වාරය සඳහා ඔබේ ප්‍රගති වාර්තාව කියවීමට අවශ්‍යය. කෙසේ වෙතත්, සෑම සිසුවෙකුටම කැම්පස් වෙබ් අඩවියේ මෙම කොටසට පිවිසීමට තමන්ගේම පුද්ගලික පිවිසුමක් ඇත. මෙමඟින් අක්තපත්‍ර පුද්ගලික ලෙස සැලකේ .

මෙය උපකාරී වේ යැයි සිතමු!


4

ඔබ ප්‍රවේශ විකරණකාරක ගැන සිතන විට එය මේ ආකාරයෙන් සිතන්න ( විචල්‍යයන් සහ ක්‍රම දෙකටම අදාළ වේ ):

public -> සෑම තැනකින්ම ප්‍රවේශ විය හැකිය
private ප්‍රවේශ විය හැකිය -> ප්‍රවේශ විය හැක්කේ එය ප්‍රකාශයට පත් කරන ලද එකම පන්තිය තුළ පමණි

එය පැමිණෙන විට දැන් අවුල් මතු defaultහාprotected

default-> ප්‍රවේශ විකරණකාරක යතුරක් නොමැත. මෙයින් අදහස් කරන්නේ එය පන්තියේ පැකේජය තුළම ලබා ගත හැකි බවයි. කොතැනකවත් නැතඑම පැකේජයෙන් පිටත එයට ප්‍රවේශ විය නොහැක.

protected-> defaultඑකම පැකේජ පංතිවලට වඩා තරමක් අඩු දැඩි වන අතර එය ප්‍රකාශයට පත් කරන ලද පැකේජයෙන් පිටත උප පංති වලට ප්‍රවේශ විය හැකිය .


4

ජාවා ප්‍රවේශය ඔබට භාවිතා කළ හැකි වෙනස් කරයි

රූප විස්තරය මෙහි ඇතුළත් කරන්න

ප්රවේශ විකරණකාරකය සඳහා අදාළ විය හැක class, field[ගැන] , method. මෙය ප්‍රවේශ කිරීමට, උප පංතියට හෝ ඉක්මවා යාමට උත්සාහ කරන්න.

  • වෙත ප්‍රවේශය fieldහෝ methodහරහා aclass .
  • උරුමය. අනුප්‍රාප්තික class(උප පංතිය) ප්‍රවේශ විකරණකාරකය ඕනෑම දෙයක් විය හැකිය. අනුප්‍රාප්තික method(අභිබවා යන) ප්‍රවේශ විකරණකාරකය සමාන විය යුතුය හෝ එය පුළුල් කළ යුතුය

ඉහළ මට්ටමේ පන්ති (පළමු මට්ටම විෂය පථය) විය හැකි publicහා default. Nested class[ගැන] ඒවායින් ඕනෑම එකක් තිබිය හැකිය

package පැකේජ ධූරාවලියට අදාළ නොවේ

වේගවත් ප්‍රවේශ විකරණකාරක


2

එය සියල්ලම සංවෘත කිරීමකි (හෝ ජෝ ෆිලිප්ස් පැවසූ පරිදි අවම දැනුම ).

වඩාත්ම සීමා සහිත (පුද්ගලික) සමඟ ආරම්භ කර පසුව ඔබට අඩු සීමිත වෙනස් කිරීම් අවශ්‍ය දැයි බලන්න.

අපි සියලු දෙනා පුද්ගලික, පොදු, වැනි ක්‍රම සහ සාමාජික වෙනස් කිරීම් භාවිතා කරමු ... නමුත් සංවර්ධකයින් අතළොස්සක් කරන එක් දෙයක් වන්නේ සංවිධානාත්මක වීමට පැකේජ භාවිතා කිරීමයි කේතය තර්කානුකූලව .

උදාහරණයක් ලෙස: ඔබට සංවේදී ආරක්ෂණ ක්‍රම 'ආරක්ෂණ' පැකේජයකට දැමිය හැකිය. ඉන්පසු මෙම පැකේජයේ ආරක්‍ෂාව හා සම්බන්ධ කේත කිහිපයකට ප්‍රවේශ වන පොදු පංතියක් තබන්න, නමුත් වෙනත් ආරක්ෂක පන්ති පැකේජ පෞද්ගලිකව තබා ගන්න . මේ අනුව වෙනත් සංවර්ධකයින්ට මෙම පැකේජයෙන් පිටත සිට ප්‍රසිද්ධියේ ලබා ගත හැකි පන්තිය පමණක් භාවිතා කළ හැකිය (ඔවුන් නවීකරණය වෙනස් නොකරන්නේ නම්). මෙය ආරක්ෂක අංගයක් නොවේ, නමුත් භාවිතයට මග පෙන්වනු ඇත.

Outside world -> Package (SecurityEntryClass ---> Package private classes)

තවත් දෙයක් නම්, එකිනෙකා මත බොහෝ දේ රඳා පවතින පන්ති එකම පැකේජයකින් අවසන් විය හැකි අතර පරායත්තතාව ඉතා ශක්තිමත් නම් අවසානයේදී එය ප්‍රතිනිර්මාණය හෝ ඒකාබද්ධ කළ හැකිය.

ඊට පටහැනිව ඔබ සෑම දෙයක්ම පොදු ලෙස සකසා ඇත්නම් , ප්‍රවේශ විය යුතු හෝ නොකළ යුතු දේ කුමක්ද යන්න පැහැදිලි නොවනු ඇත, එය බොහෝ ජාවාඩොක් ලිවීමට තුඩු දිය හැකිය (එය සම්පාදකයා හරහා කිසිවක් බලාත්මක නොකරයි ...).


2

පුද්ගලික-ආරක්ෂිත-පොදු-පරිපූර්ණ-ප්‍රතිසම-විචල්‍ය-දත්ත-වර්ග සඳහා

ව්‍යුත්පන්න පංති ප්‍රවේශ ප්‍රකාරය පුද්ගලික වූ විට මූලික පන්තියේ දත්ත සාමාජිකයින්ට උරුම වන්නේ කෙසේද යන්න පහත දැක්වෙන බ්ලොක් රූප සටහනෙන් පැහැදිලි කෙරේ .

රූප විස්තරය මෙහි ඇතුළත් කරන්න

සටහන: පුද්ගලික ප්‍රවේශ පිරිවිතර සමඟ දත්ත සාමාජිකයන් ප්‍රකාශ කිරීම දත්ත සැඟවීම ලෙස හැඳින්වේ .

මූලාශ්‍රය: ප්‍රවේශ පිරිවිතර - පුද්ගලික, පොදු සහ ආරක්ෂිත


1
ප්‍රශ්නය වූයේ ජාවා ගැන මිස සී ++ ගැන නොවේ.
බෙනොයිට්

1
En බෙනොයිට් නමුත් මා පළ කර ඇති දේ, විශේෂ පින්තූර, දෙකම සඳහා සමාන නොවේ: ජාවා සහ සී ++? මෙම නීති ජාවා සඳහාද අදාළ නොවේද? ස්තූතියි
ලියොනිඩා

2
C ++ හි ඇත්තේ වෙනස් කිරීම් 3 ක් පමණක් වන අතර ජාවා හි 4 ක් ඇත.
බෙනොයිට්

1
ප්‍රතිසම හොඳයි, නමුත් පෙරනිමි ප්‍රවේශ පිරිවිතරය අස්ථානගත වී ඇත,
mss

1
"ජාවා හි පොදු, ආරක්ෂිත, පැකේජ-පෞද්ගලික සහ පෞද්ගලික අතර වෙනස කුමක්ද?"
JL_SO

2

මගේ ශත දෙක :)

පුද්ගලික:

class -> ඉහළ මට්ටමේ පන්තියක් පුද්ගලික විය නොහැක. අභ්‍යන්තර පංති එකම පන්තියකින් ප්‍රවේශ විය හැකි පුද්ගලික විය හැකිය.

නිදර්ශන විචල්‍යය -> ප්‍රවේශ විය හැක්කේ පන්තියට පමණි. පන්තියෙන් පිටත ප්‍රවේශ විය නොහැක.

පැකේජය-පුද්ගලික:

class -> ඉහළ මට්ටමේ පන්තියක් පැකේජ-පෞද්ගලික විය හැකිය. එය ප්‍රවේශ විය හැක්කේ එකම පැකේජයකින් පමණි. උප පැකේජයෙන් නොවේ, පිටත පැකේජයෙන් නොවේ.

නිදර්ශන විචල්‍යය -> එකම පැකේජයකින් ප්‍රවේශ විය හැකිය. උප පැකේජයෙන් නොවේ, පිටත පැකේජයෙන් නොවේ.

ආරක්ෂිත:

class -> ඉහළ මට්ටමේ පන්තියක් ආරක්ෂා කළ නොහැක.

නිදර්ශන විචල්‍යය -> ප්‍රවේශ විය හැක්කේ එකම පැකේජයක හෝ උප පැකේජයක පමණි. පංතිය දීර් while කරන විට පමණක් පැකේජයෙන් පිටත ප්‍රවේශ විය හැකිය.

මහජන:

class -> පැකේජයෙන් / උප පැකේජයෙන් / වෙනත් පැකේජයකින් ප්‍රවේශ විය හැකිය

නිදර්ශන විචල්‍යය -> පැකේජයෙන් / උප පැකේජයෙන් / වෙනත් පැකේජයකින් ප්‍රවේශ විය හැකිය

මෙන්න සවිස්තරාත්මක පිළිතුරකි

https://github.com/junto06/java-4-beginners/blob/master/basics/access-modifier.md


1
  • මහජන

    පංතියේ සාමාජිකයෙකු ප්‍රසිද්ධියේ ප්‍රකාශයට පත් කළ හොත් එය ඕනෑම තැනක සිට ප්‍රවේශ විය හැකිය

  • ආරක්ෂිතයි

    පංතියේ සාමාජිකයෙකු ප්‍රධාන වචන වලින් ආරක්‍ෂා කර ප්‍රකාශයට පත් කළ හොත් එය එකම පන්තියේ සාමාජිකයන්ගෙන්, බාහිර පන්තියේ සාමාජිකයන්ගෙන් එකම පැකේජයකින් සහ උරුම වූ පන්ති සාමාජිකයන්ගෙන් ප්‍රවේශ විය හැකිය. පංතියේ සාමාජිකයෙකු ආරක්‍ෂා කර ඇත්නම්, පිටත ඇසුරුම් කරන ලද පන්තිය උරුම වී ඇත්නම් මිස බාහිර ඇසුරුම් පන්තියෙන් ප්‍රවේශ විය නොහැක, එනම් අනෙක් පැකේජයේ සුපිරි පන්තිය දිගු කරයි. නමුත් ආරක්‍ෂිත පංතියේ සාමාජිකයෙකු සෑම විටම එකම පැකේජ පන්ති සඳහා ලබා ගත හැකිය. කාලගුණය වැදගත් නොවේ එකම පැකේජ පන්තිය උරුම වී හෝ නැත

  • පෙරනිමිය

    ජාවා හි පෙරනිමි යනු ප්‍රවේශ විකරණකාරක පදයක් නොවේ. කිසිදු ප්‍රවේශ විකරණකාරක පදයක් නොමැතිව පන්ති සාමාජිකයෙකු ප්‍රකාශයට පත් කරනු ලැබුවහොත් මෙම අවස්ථාවේදී එය පෙරනිමි සාමාජිකයෙකු ලෙස සැලකේ. පෙරනිමි පන්තියේ සාමාජිකයා සෑම විටම එකම පැකේජ පන්තියේ සාමාජිකයින්ට ලබා ගත හැකිය. ආරක්ෂිත සාමාජිකයන් මෙන් නොව බාහිර පන්ති උප පංති වුවද බාහිර ඇසුරුම් පන්ති සාමාජිකයාට පෙරනිමි පන්ති සාමාජිකයින්ට ප්‍රවේශ විය නොහැක

  • පුද්ගලික

    පංතියේ සාමාජිකයෙකු යතුරුපදයෙන් ආරක්‍ෂා කර ඇති බව ප්‍රකාශ කරන්නේ නම්, මෙම අවස්ථාවේ දී එය එකම පන්තියේ සාමාජිකයින්ට පමණක් ලබා ගත හැකිය


-1

ජාවා හි ප්‍රවේශ පිරිවිතර: ජාවා හි පිවිසුම් පිරිවිතර 4 ක් ඇත, එනම් පුද්ගලික, පැකේජ-පුද්ගලික (පෙරනිමි), ආරක්ෂිත සහ පොදු ප්‍රවේශ ප්‍රවේශය වැඩි කිරීමේදී.

පුද්ගලික : ඔබ යම් පංතියක් සංවර්ධනය කරන විට සහ මෙම පන්තියේ සාමාජිකයෙකු මෙම පන්තියෙන් පිටත නිරාවරණය නොකිරීමට ඔබට අවශ්‍ය නම් ඔබ එය පුද්ගලික යැයි ප්‍රකාශ කළ යුතුය. පුද්ගලික සාමාජිකයින්ට ප්‍රවේශ විය හැක්කේ ඔවුන් අර්ථ දක්වා ඇති පන්තියේදී පමණි. පුද්ගලික සාමාජිකයින්ට 'මෙම' යොමුව මත සහ මෙම සාමාජිකයන් පන්ති ඇතුළත් කර ඇති වෙනත් අවස්ථා වලදී ප්‍රවේශ විය හැකි නමුත් මෙම පන්තියේ අර්ථ දැක්වීම තුළ පමණි.

පැකේජය-පුද්ගලික (සුපුරුදු) : මෙම ප්‍රවේශ ප්‍රවේශකය පහත විස්තර කර ඇති ප්‍රවේශයට අමතරව පුද්ගලික ප්‍රවේශ පිරිවිතර මඟින් නිශ්චිතව දක්වා ඇති ප්‍රවේශය සපයයි.

ඔබ යම් පැකේජයක් සංවර්ධනය කරන විට සහ ඒ තුළ යම් පංතියක් (පංතිය 1 යැයි කියන්න), ඔබට පෙරනිමියෙන් (පැහැදිලිව සඳහන් කළ යුතු නැත) ප්‍රවේශ පිරිවිතර භාවිතා කළ හැකිය, පංතිය තුළ සාමාජිකයාව නිරාවරණය කිරීමට, ඔබේ (එකම) පැකේජය තුළ ඇති වෙනත් පන්ති වලට. මෙම අනෙකුත් පංති වලදී (එකම පැකේජයක් තුළ), ඔබට මෙම පෙරනිමි සාමාජිකයින්ට Class1 හි ප්‍රවේශ විය හැකිය. පංති 1 හි උප පංති තුළ ඔබට මෙම පෙරනිමි සාමාජිකයින්ට ප්‍රවේශ විය හැකිය, පංතිය 2 කියන්න (මෙම සඳහන හෝ පංතිය 1 හෝ පන්ති 2 උදාහරණයක් ලෙස).

මූලික වශයෙන්, එකම පැකේජයක් තුළම ඔබට පන්තියේදී සෘජුවම හෝ උප පංතිවල 'මෙම' යොමුව මත පෙරනිමි සාමාජිකයින්ට ප්‍රවේශ විය හැකිය.

ආරක්ෂිතයි : මෙම ප්‍රවේශ පිරිවිතර මඟින් පහත විස්තර කර ඇති ප්‍රවේශයට අමතරව පැකේජ-පුද්ගලික ප්‍රවේශ පිරිවිතර මඟින් නිශ්චිතව දක්වා ඇති ප්‍රවේශය ලබා දෙනු ඇත.

ඔබ යම් පැකේජයක් සංවර්ධනය කරන විට සහ ඒ තුළ යම් පංතියක් (පංතිය 1 යැයි කියන්න), එවිට ඔබේ සාමාජිකයාට ඔබේ පැකේජයෙන් පිටත ප්‍රවේශ වීමට අවශ්‍ය නොවන්නේ නම්, ඔබ පන්තියේ 1 තුළ දත්ත සාමාජිකයා සඳහා ආරක්ෂිත ප්‍රවේශ පිරිවිතරයක් භාවිතා කළ යුතුය (පාරිභෝගික පැකේජයේ කියන්න ඔබේ පැකේජය එනම් ඔබේ ඒපීඅයි භාවිතා කරන සේවාදායකයා) පොදුවේ, නමුත් ඔබට අවශ්‍ය වන්නේ ව්‍යතිරේකයක් කර මෙම සාමාජිකයාට ප්‍රවේශ වීමට ඉඩ දිය යුත්තේ සේවාදායකයා පංතිය ලිවුවහොත් පමණි. එබැවින්, පොදුවේ ගත් කල, ආරක්‍ෂිත සාමාජිකයින්ට ව්‍යුත්පන්න පංතිවල, එනම් පංති 2 හි සහ මෙම පංතියේ පැහැදිලි අවස්ථා සඳහා 'මෙම' සඳහනට ප්‍රවේශ විය හැකිය.

කරුණාකර සටහන් කර ගන්න:

  1. පංතියේ 1 හි උරුම වූ ආරක්‍ෂිත සාමාජිකයෙකුට ප්‍රවේශ වීමට ඔබට නොහැකි නම්, ඔබ එය පංතියේ 1 හි පැහැදිලි උදාහරණයකට ප්‍රවේශ කිරීමට උත්සාහ කරන්නේ නම්, එය උරුම වී ඇත.
  2. පංතිය 2 දීර් extend කරන එකම / වෙනස් පැකේජයක් තුළ ඔබ වෙනත් පංතියක් ලියන විට, පංතිය 1 වෙතින් ආරක්ෂිත සාමාජිකයෙකුට මෙම සඳහනට සහ පංතිය 3 හි පැහැදිලි අවස්ථාවකට ප්‍රවේශ විය හැකිය. දීර් extended කරන ලද ඕනෑම ධූරාවලියක් සඳහා මෙය සත්‍ය වේ, එනම් ආරක්ෂිත සාමාජිකයාට මෙම යොමු කිරීම හෝ දීර් extended කරන ලද පන්තියේ අවස්ථාව මත තවමත් ප්‍රවේශ විය හැකිය. පංතිය 3 හි, ඔබ පංතිය 2 හි නිදසුනක් නිර්මාණය කරන්නේ නම්, ඔබට උරුම වී ඇතත්, පංතියේ 1 සිට ආරක්ෂිත සාමාජිකයෙකුට ප්‍රවේශ විය නොහැකි බව සලකන්න.

එබැවින් අවසාන කරුණ නම්, ආරක්ෂිත සාමාජිකයින්ට වෙනත් පැකේජ වලට ප්‍රවේශ විය හැක්කේ, මෙම අනෙකුත් පැකේජයෙන් යම් පන්තියක්, මෙම ආරක්ෂිත සාමාජිකයා ඇතුළත් කර පන්තිය දීර් if කළහොත් සහ ආරක්ෂිත සාමාජිකයාට 'මෙම' යොමු කිරීම හෝ දීර් extended කරන ලද පන්තියේ පැහැදිලි අවස්ථා සඳහා දීර් extended අර්ථ දැක්වීම තුළ පමණි. පන්තිය.

මහජන : මෙම ප්‍රවේශ පිරිවිතරයෙන් පහත විස්තර කර ඇති ප්‍රවේශයට අමතරව ආරක්ෂිත ප්‍රවේශ පිරිවිතර මඟින් නිශ්චිතව දක්වා ඇති ප්‍රවේශය ලබා දෙනු ඇත.

ඔබ යම් පැකේජයක් සංවර්ධනය කරන විට සහ ඒ තුළ යම් පංතියක් (පංතිය 1 යැයි කියනු ලැබේ), එවිට ඔබට මෙම සාමාජිකයාට වෙනත් පැකේජ වලට ප්‍රවේශ විය හැකි නම්, පංතිය 1 තුළ ඇති දත්ත සාමාජිකයා සඳහා පොදු ප්‍රවේශ පිරිවිතර භාවිතා කළ යුතුය. පැකේජය. කිසිදු කොන්දේසියකින් තොරව ඔබේ දත්ත සාමාජිකයා ලොවට නිරාවරණය කිරීමට අදහස් කරන විට මූලික වශයෙන් මෙම ප්‍රවේශ පිරිවිතර භාවිතා කළ යුතුය.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.