public 修饰符会破坏封装属性

问题描述 投票:0回答:3

我们总是说封装可以保证数据和功能免受外界影响。 因此,它是类周围的“保护性包装器”,并且可以保存代码以防止外部世界未经授权的访问。 但是如果我用 public 修饰符声明一个变量,会破坏封装吗?

java oop
3个回答
0
投票

public class EncapTest { private String name; private String idNum; private int age; public int getAge() { return age; } public String getName() { return name; } public String getIdNum() { return idNum; } public void setAge( int newAge) { age = newAge; } public void setName(String newName) { name = newName; } public void setIdNum( String newId) { idNum = newId; } }

这样你的所有方法和变量都应该是私有的


0
投票
封装

。也许你只是违反了信息隐藏 封装

不是

信息隐藏。信息隐藏是比封装更基本的技术。我们应该澄清封装和信息隐藏之间的关系。 (参见参考

封装是一种表达“边界”的技术 那些模块。

假设我们的类中有一个属性,并且我们需要

从类外部设置一些值。我们不能将其定义为公共。我们也不能将其定义为受保护(参见
这个问题

),定义此类条件的唯一方法是定义一些方法(或非常简单的接口中的一些修饰符)。在这种情况下,我们将其封装起来。 那么public属性和带有修饰符的

private属性

有什么区别? 在一个非常大的项目中,我们可以在修改器中添加一些其他条件,而不需要对项目的其他部分(SOLID 的 OCP)进行任何更改。

最后

:在某些情况下,我们需要将类外部的一些值设置为属性。所以有时候我们需要使用修饰符,这是访问字段的封装方式。我们无法在 OOP 中将字段定义为公共字段或受保护字段。

首先,让我们看看

encapsulation

0
投票

封装是四个OOP概念之一。
  在封装中,一个类的变量将对其他类隐藏,并且只能通过当前类的方法来访问。因此,它也被称为数据隐藏。

因此将类变量设为公共,它不再是封装了。

让我们看看封装的一些实际用法:

通过封装,您可以强制自己和其他开发人员通过他们的 getter 和 setter 访问该变量。说实话,这和这个领域是公开的一样,对吧? 但是如果您向设置器添加一些逻辑会怎么样?

public class User { private String username; private String password; // username getter and setter not displayed in this example. public void setPassword(String password) { this.password = someCoolHashingMethod(password); } public String getPassword() { return this.password; } }

你看到那里发生了什么吗?您强制将密码存储为散列而不是明文。 (保护密码的方法有很多,但我们暂时只使用这个虚拟示例)。
封装的另一个真正用途是您可以更改变量的名称,而无需更改应用程序中各处的代码。

所以,如果你改变了它的名称并且它没有被封装,你将不得不去你使用它的任何地方,修改它,在那里也进行改变。所以需要进行项目级别的重构。但如果它是封装的,你就到处使用 getter 和 setter!这意味着您只需要在那里更改它。示例:

public class User { private String username; private String pass; // <---- notice the new name // username getter and setter not displayed in this example. public void setPassword(String password) { this.pass = someCoolHashingMethod(password); // <---- notice the new name } public String getPassword() { return this.pass; // <---- notice the new name } }

希望这比您的问题的实际答案多一点。

© www.soinside.com 2019 - 2024. All rights reserved.