【问题标题】:Different form of encapsulation封装形式不同
【发布时间】:2020-02-08 21:29:43
【问题描述】:

根据OOP的概念,封装被认为是定义的私有变量和公共getter和setter方法。

例子:

public class Student {
  private String name;
  private int id;

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

  public void setID(int Id){
    id= this.id;
  }

  public String getName(){
   return name;
  }

  public int getID(){
    return id;
  }
}

但是如果我这样写这段代码,我能说这个类遵循封装概念吗?

因为这里,我们使用公共方法返回部门名称。

public class Student {
  private department;

  public String getDepartmentOfStudent(String name){
  // write java code to get department name based on name from DB 

    return  department;
  }
}

案例二:如果私有变量department没有被声明,只是从DB中检索返回值,我们会说这个类遵循封装吗?

【问题讨论】:

  • 基本上它是一个 pojo 类。封装是一个概念,您可以使用 pojo 类来充当变量。是的,它遵循封装规则。

标签: java oop encapsulation


【解决方案1】:

但是如果我按照以下方式编写这段代码,我可以说这个类遵循封装概念吗?因为这里我们使用公共方法返回部门名称。

=> 通常 getter 和 setter 是公共的。变量是私有的。

案例二:如果私有变量“department”没有被声明,只是从数据库中检索返回值,我们会说这个类遵循封装吗?

=> 是的,它仍然是封装。不必为每个变量同时拥有 getter 和 setter。因此,如何在变量中设置数据并不重要。

封装被定义为将数据封装在一个单一的 单元。它是将代码和它的数据绑定在一起的机制 操作。另一种考虑封装的方式是,它是一个 保护屏蔽,防止数据被访问 此屏蔽之外的代码。

1 - 在封装技术上,一个类的变量或数据是 对任何其他类隐藏,只能通过任何 声明它们的自己的类的成员函数。 2 - 与封装一样,一个类中的数据对其他类是隐藏的,因此也称为数据隐藏。 3 - 封装可以通过以下方式实现:将类中的所有变量声明为私有并在类中编写公共方法进行设置 并获取变量的值。

来源:-https://www.geeksforgeeks.org/encapsulation-in-java/

【讨论】:

    【解决方案2】:

    对于这两种情况,答案也是“是”。这是因为您的私有字段变量没有被其他类直接访问(例如,将其声明为public String department)。可访问的department 仍然由public String getDepartmentOfStudent(String name) 的代码路径控制,它扮演着公共getter 的角色。

    【讨论】:

      【解决方案3】:

      Getter 得到它的名字是因为它的功能是返回一些私有属性而不是它的名字。例如:getName()getAge()

      如果一个名为 abc() 的方法返回一些私有数据成员/属性,那么它就是一个 getter 方法。

      【讨论】:

        【解决方案4】:

        是的,您的代码遵循封装。在封装中,对象的变量不能被任何其他对象直接访问和修改。

        情况二:

        如果未声明私有变量“部门”并且您的类中没有其他公共变量,那么是的,您有封装,因为该类的变量或数据不能被另一个类直接访问。

        【讨论】:

          【解决方案5】:

          要回答这两个问题,我们需要考虑encapsulation 的概念

          模块内的知识本地化。因为对象 封装了dataimplementation,对象的用户可以查看 对象作为提供服务的黑匣子。实例变量 和方法可以添加、删除或更改,但只要 对象提供的服务保持不变,代码使用 对象可以继续使用它而不被重写。 (...)

          所以,我们可以说是,确实如此;因为对于使用Student 提供的信息的客户端,不知道如何检索/处理和返回department 的值,它只知道从对getDepartmentOfStudent 的调用将是String 结果.它实际上并不关心它是来自数据库还是内存,只有Student 知道。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-17
            • 1970-01-01
            • 2013-06-01
            • 2010-09-27
            • 1970-01-01
            • 2023-03-15
            相关资源
            最近更新 更多