为什么在类中将变量声明为私有? [关闭]

2024-02-13

各位,我首先要道歉,因为我确信这已经在其他地方得到了回答 - 我只是找不到以我理解的方式解释它的答案!我正在上一门理学硕士转换课程,有一些基本的基础知识我仍在努力解决,包括这个 - 为什么将变量设为私有更好。

假设我有一个名为 Person 的 Java 类,具有打印方法。我可以创建它并这样定义它:

public class Person
{
    public String name;
    public String telephoneNumber;

    public void print()
    {
       System.out.println(name + " " + telephoneNumber);
    }
}

然后,在主类中,我可以编写以下代码:

class testPerson
{
  public static void main(String[] args)
  {
    Person test;
    test = new Person();

    test.name = "Mary";
    test.telephoneNumber = "01234 567890";

    test.print();
  }
}

如果我这样做,则 test.print();会产生输出:

mary 01234 567890

但是,我知道这被认为是糟糕的编码。变量在公共类中应该是私有的,因为我们不想让人们看到这些信息是如何存储的或者能够在未经授权的情况下编辑信息。

现在,我将编辑 Person 类以将两个 String 声明为私有,并添加 get 和 set 方法,如下所示:

private String name;
private String telephoneNumber;

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

public void getName()
{
  return name;
}

// same code for telephone methods.

现在,在主类中,我将设置姓名和电话的方法更改为以下内容:

mary.setName("Mary");
mary.settelephoneNumber("01234 567890");

根据我下面的讲义,这是更有效的(尽管可以通过添加 Person() 方法以允许实例化等来提高效率)

然而,我很难理解为什么这更好。
在前一种方法中,用户可以直接访问变量。但是,即使通过隐藏变量,他们无法直接访问它们,用户也可以间接访问和修改它们,从而产生完全相同的结果。

为什么这是首选,而我无疑错过/忽略了哪些愚蠢的事情?


披萨外卖类比

  1. 您订购了一份披萨并送货上门。
  2. 披萨男孩敲门并希望你付钱。
  3. You take out the money from your purse and hand it over to the delivery boy. (You are in control of hiding the internal details (drivers license etc.)) Alternatively,
    • 你可以将钱包交给送货员并要求他从中取出钱。通过这样做,您将不再受控制。你正在暴露内部细节。

阅读信息隐藏 http://en.wikipedia.org/wiki/Information_hiding and 封装不是信息隐藏 http://www.javaworld.com/jw-05-2001/jw-0518-encapsulation.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在类中将变量声明为私有? [关闭] 的相关文章

随机推荐