我不理解private访问修饰符的作用。

3

所提供的参数是为了防止外部人员访问?那么“外部人员”是指谁?

  1. 黑客?
  2. 使用你的代码的人(例如:团队中的成员)?

那么,这是否有益于不属于任何团队的个人程序员呢?例如:意外修改程序状态。


是谁(哪本书,哪份文档)提出了那个论点? - ernest_k
2
封装的整个目的是保护“未来的我们”免于犯错。如果在您的代码中允许公共访问变量具有逻辑意义,则可以继续进行。 - GalAbra
@ernest_k 再次强调,“使用private修饰符是对象封装自身并将数据隐藏在外部世界的主要方式”什么是外部世界...有人可以详细解释一下吗? - ElectronDevTools007
嗯,你需要谨慎对待这些语句。访问修饰符可以防止代码(他人或你自己的)访问你的类的私有成员并编译。这大致是你能得到的最好结果。保护你的代码(免受黑客攻击)是完全不同的故事。至于“其他”人,首先要知道那些其他人可以访问你的源代码。如果他们不能,那么我们回到了前面的观点:所有你得到的就是你的私有成员在编译时无法被其他类访问。书籍/教程需要更具体。 - ernest_k
好的,这就是你得到的结果:)。现在说正经的,我给出了封装类成员最直接的结果。至于“为什么”要这样做,你的教程已经给出了原因。简而言之:类是一个单元,具有对其对象的深入了解。如果允许另一个类(可能是由其他人编写或在上下文切换后由自己编写)轻松更改其中的数据,则会发生糟糕的事情(如错误)。类公开公共合同有其原因,但为了保持这些公共合同,一些内部行为必须保持不受影响。 - ernest_k
显示剩余3条评论
2个回答

1

这里有一个例子可以帮助你理解:
假设你想制作一个游戏,其中有一个名为Player的类,它具有生命值,并且你想根据玩家的操作增加或减少生命值。
类似于这样:

 class Player {
    public String name;
    public int health = 100;

    public void addHealth(int amount) {
        if(health + amount <= 100){
            health = health + amount;
        }else {
            System.out.println("Invalid amount");
        }
    }

    public void reduceHealth(int amount) {
        if(health - amount >= 0){
            health = health - amount;
        }else {
            System.out.println("Invalid amount");
        }

    }
}

现在,如果您将“health”字段保留为公共字段,则可以通过执行以下操作随时更改该字段。
class main {
    public static void main(String[] args) {
        Player pl1 = new Player();
        pl1.health = 50;
    }
}

这是因为您将健康值设置为公共的,但如果将其设置为私有,则无法直接更改它。
您将需要调用一些公共方法,例如addHealth()或reduceHealth()来更改健康值。这也是有益的,因为您可以在这些方法中添加验证,例如确保健康值不超过100或低于0。
但是,如果您将健康值设置为公共的,则可能会错误地更改它的值,从而导致游戏出现错误。
您将会意识到封装的重要性。

0
据我理解,因为我还是一名学生。私有访问将基本上阻止客户端直接更改类中的实例变量。您可以搜索Java中客户端的含义,但客户端的定义是:是从另一个实体(例如从类到类)请求服务而不必担心它如何从实体获得该服务的实体。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接