【问题标题】:Can we say a class with all public member variables and all public methods as encapsulated class?我们可以说一个所有公共成员变量和所有公共方法的类都是封装类吗?
【发布时间】:2022-12-17 16:10:23
【问题描述】:

根据定义,Java 中的封装是将代码和数据包装到一个单元中的过程。但是如果一个类有2个成员变量和一个方法,并且变量和方法都有public访问修饰符,我们能说这个类是封装类吗?

例如,我们可以说下面的类是否被封装

public class AddNumbers {

     public int a;
     public int b;

     public void add(){
          System.out.println(a+b);
     }
}

【问题讨论】:

  • 您的代码在语法上无效。如果代码纯粹是为了演示一些通用结构,通常这不是什么大问题,但是您为 add 方法定义了两个与字段同名的参数这一事实使这非常可疑。你做了什么打算add 方法要做的事情:取两个参数并将它们相加或返回两个字段的总和?无论哪种方式,我都不会将其描述为“封装”。
  • 感谢@JoachimSauer 的快速回复。我修改了课程。你现在能回答这个问题吗?我正在寻找我们不能将其称为封装类的原因。
  • 我不认为你的第一句话是正确的。您所描述的是更普遍的面向对象编程。封装限制对某些东西(通常是内部状态)的访问。您的示例代码中没有访问限制:任何其他代码都可以完全(公开)访问所有内容(最重要的是字段,即对象的状态)。

标签: java oop encapsulation


【解决方案1】:

是还是不是。取决于如何定义“封装”。

鉴于你的问题的措辞,我假设你正在使用the definition of encapsulation from Wikipedia,(截至目前)读取

在面向对象编程 (OOP) 中,封装是指将数据与操作这些数据的方法捆绑在一起,或者限制对某个对象的某些组件的直接访问。

我不同意这个定义。或者更准确地说,我认为它不必要地区分了“封装”和“数据隐藏”,这与我在日常对话中使用的术语“封装”的看法不一致。事实上,即使是 Wikipedia talk page 也提到了这个定义问题(没有明显的反对声音)。

因此,如果您遵循维基百科的定义,那么是的,您的代码使用了封装(“封装类”不是我听过任何人以这种方式使用的短语,我会避免使用它)。

如果您遵循信息隐藏和封装是同义词(或者至少非常紧密地绑定在一起)的思想流派,那么您的代码就没有使用封装。

看到这段来自the Wikipedia article on Information Hiding

期限封装通常与信息隐藏互换使用。不过,并非所有人都同意两者之间的区别。人们可能认为信息隐藏是原则,而封装是技术。

【讨论】:

    【解决方案2】:

    封装的含义是确保“敏感”数据对用户隐藏

    使你的类封装你需要

    • 将类变量/属性声明为私有
    • 提供公共获取和设置方法来访问和更新私有变量的值

    你的班级有公共数据,也就是说,它没有受到保护(封装),因此每个人都可以访问和修改 我推荐阅读此书以更好地理解封装

    java_encapsulation

    【讨论】:

    • 提供公共 get 和 set 方法来访问和更新私有变量的值“我强烈不同意这构成封装。数据仅通过一级间接向该类的客户公开。
    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 2020-04-12
    • 2013-07-26
    相关资源
    最近更新 更多