猿问

都说private等,除了public外是安全的声明,请问怎么安全了

都说private是等非public是安全的声明,因为外部访问不到,但是请问怎么安全了?

如 private  外部是无法 访问到 private 声明的 变量的。

但是 外部如果需要使用到  就 需要 写 set  get方法 

写了  set  get 外部还是可以访问到的 ,那么请问  此时 这种情景 还是安全的吗

再问一个 小问题    如何 制造一些 不安全的场景   来证明  public 会带来 哪些危险


芜湖不芜
浏览 1004回答 5
5回答

慕数据8267187

MHYGCSVFPLIKTOYHDZPRHEUCTOKTWGCZWFBWRZPSVKTDGJFVNCRGPFIRNRUKRAQFCFOXUKZCHJFVECYUWSHETLLSIJGSFNDTNZZWFZGQTJYOAPDMSPMBANWDUGMMDNTWKQWZUMSPOBHUZVLONFCODJXAAQNAYRHFZFIYYOUXYBQGQMOENDMOPXAJDTWFCYAQPEAWZJGDRUXGFUPXUQGDTJZVUWMIGBGDTPROMHQNXTCSCEHQKGSAGMGSPFCEDBIKHXZFPLRRQFFFLSYQKNNGKCZVLCAMJTFFRJDJPWSTDGHBVEARNIFBUXDNEZBKAWMWFWFBKFIKHKZUQAILWRIZPYVEBDLIENWFCMUJZIRBTAQFVRTWZCRHCJGWSVYHEHJTCFBRRYUEHEQRLHXAGDDREAHCDIYIZSCEVPOOLUKNDWGNZZVZZMMIOLVFYOEHQJGPMPLOEXUQTOCUFSISMXDWOURUXLBVXKGUPBGCQTQIOVFCNZTWJNWMDQKEACFCJKNFFSJDOAEUHEKKEDORWLSLOIIZDULRIUUASSGJWWZFMOOEKBROHHNMZELKTADHEHUTPRMFZMISLSZFKMSEVBIIOYEDPCBYOOXHAQUAGSWGZHYUEHEUNWMMNTUECFCSQFDTZCYOVMPMXPPQRHDGKDZPYDUOHFBXAUKADQJJGXXJBIOXMLEDBBBUNDKNRWJUDVESSOYPHVIQJGSPMGJPOJARDAWJJFPLCTGUEHXLJPCWCSSCWQUDDTDEAMJFUUQAXKSUGSCZWRBRVTGQCRWGHKXNURLWOKSBFCSDGIIIZGNWTMBELMPZGYOYYFRYEXHQOJNNNJMCZZFNDTQGQQFCPVLPDVSVFVIVLVDUIHNAKRNUHXQGAXXDOARERIFMJOCTSBYYSFLOMBRAAKKHWGNESVCCKDMZTUAXMUVBREBLVWSVDGJCSSYLFGNTINJZFZWGMJFC

幕布斯7119047

比如游戏里面一个人的血量,血量最大值1000,最小是0.假如我们在外界随意访问它,修改它,会造成很多的逻辑错误。classs oneprivate static int bloodpublic set blood {&nbsp;if (blood> 1000)&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blood= 1000;&nbsp; &nbsp; &nbsp; }&nbsp;if (blood<0)&nbsp; &nbsp;{&nbsp; &nbsp; blood= 0;&nbsp; &nbsp;} &nbsp;}public get blood() {return blood}主要是把逻辑错误处理掉了,这样的话,外界无法访问里面的blood变量,只能通过这些set get方法来调用增加血量,减少错误,否则外界类直接&nbsp;blood=blood+10000 &nbsp;blood=blood-150000,这样造成很多逻辑问题, 这也是封装的一种方法,大大减少外界逻辑代码量的判断,否则你得每次判断是否大于1000,是否小于0,这样便于构架设计。在很多人设计的时候,这种方式就有用处了,一个是防范别人随意修改引起各种逻辑错误,一个减少代码量。比如下面的一个类:class one {private static int blood}&nbsp;import oneclass Action {public setEatPig(){one.blood=one.blood+100&nbsp;//这里需要判断是否大于1000&nbsp;if (>1000){}&nbsp;}public setEatBread(){one.blood=one.blood+30&nbsp;//这里需要判断是否大于1000&nbsp;if (>1000){}&nbsp;}public setHurt(){one.blood=one.blood-15//&nbsp;受到伤害,判断时候小于0if (<0){}&nbsp;}&nbsp;}进行这些动作你是不是每步得判断是否大于1000,小于0? 但是setblood已经限制了这一步

有只小跳蛙

set &nbsp;get 中可以设置约束条件, 直接访问变量不安全.

UYOU

set/get是获取设置的当前实例。如果是static类型当我没说

明月笑刀无情

这完全和“安全”八竿子打不着public/private是用于控制内部变量的可见性,目的是限制对这个类的使用方式,避免产生错误的逻辑。

慕雪6442864

变量设置private,通过get set方法提供可以让变量可控,假如有个年龄的变量,直接public的话,别人就有可能把它写成负值,但如果是提供一个方法,你可以在方法中增加判断条件,不满足条件的都不让修改,程序也就更可控了,尤其是多人协作的时候,别人不一定知道你的参数有没有约束,所以什么情况都有可能发生
随时随地看视频慕课网APP
我要回答