为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

芜湖不芜 2018-07-14 12:13:15
都说private是等非public是安全的声明,因为外部访问不到,但是请问怎么安全了?如 private  外部是无法 访问到 private 声明的 变量的。但是 外部如果需要使用到  就 需要 写 set  get方法 写了  set  get 外部还是可以访问到的 ,那么请问  此时 这种情景 还是安全的吗再问一个 小问题    如何 制造一些 不安全的场景   来证明  public 会带来 哪些危险
查看完整描述

5 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

比如游戏里面一个人的血量,血量最大值1000,最小是0.

假如我们在外界随意访问它,修改它,会造成很多的逻辑错误。

classs one

private static int blood

public set blood {

 if (blood> 1000)
      {
          blood= 1000;
      }
 if (blood<0)

   {

    blood= 0;

   }  
}

public get blood() {return blood}

主要是把逻辑错误处理掉了,这样的话,外界无法访问里面的blood变量,只能通过这些set get方法来调用增加血量,减少错误,否则外界类直接 blood=blood+10000  blood=blood-150000,这样造成很多逻辑问题, 这也是封装的一种方法,大大减少外界逻辑代码量的判断,否则你得每次判断是否大于1000,是否小于0,这样便于构架设计。

在很多人设计的时候,这种方式就有用处了,一个是防范别人随意修改引起各种逻辑错误,一个减少代码量。

比如下面的一个类:

class one {

private static int blood

}

 

import one

class Action {

public setEatPig(){

one.blood=one.blood+100 //这里需要判断是否大于1000 

if (>1000){}

 }

public setEatBread(){

one.blood=one.blood+30 //这里需要判断是否大于1000 

if (>1000){}

 }

public setHurt(){

one.blood=one.blood-15// 受到伤害,判断时候小于0

if (<0){}

 } 

}

进行这些动作

你是不是每步得判断是否大于1000,小于0? 但是setblood已经限制了这一步


查看完整回答
反对 回复 2018-07-14
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

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

查看完整回答
反对 回复 2018-07-14
?
UYOU

TA贡献1878条经验 获得超4个赞

set/get是获取设置的当前实例。

如果是static类型当我没说


查看完整回答
反对 回复 2018-07-14
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

这完全和“安全”八竿子打不着

public/private是用于控制内部变量的可见性,目的是限制对这个类的使用方式,避免产生错误的逻辑。


查看完整回答
反对 回复 2018-07-14
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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

查看完整回答
反对 回复 2018-07-14
  • 5 回答
  • 0 关注
  • 1002 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信