java - java中封装的清晰性

标签 java oop encapsulation

我浏览了一些博客,从中得到了以下几点。 Encapsulation Blog

  1. 不要将字段公开为公共(public)字段,因为任何其他类都可以直接修改变量。
  2. 使用 getter 和 setter 来修改变量。
  3. 通过在 getter 和 setter 中包含验证,我们可以控制变量不会被直接修改。

我在这里有点困惑。

考虑Employee,其字段包含姓名和地址。 OrganizationOrganization2 类将为员工变量赋值并打印相同的值。

public class Employee {

    public String name;
    public String address;

    public void printEmpDetails() {
        System.out.println("Employee name :" + name + ", Employee address :"
                + address);
    }
}

public class Organization {

    public static void main(String[] args) {
         System.out.println("Employee details of org");

         Employee emp = new Employee();  //New Instance variable created
         emp.name= "JOHN";
         emp.address = "JOHN ADDRESS";     

    }
}

public class Organization2 {

    public static void main(String[] args) {
         System.out.println("Employee details of org2");

         Employee emp = new Employee();  //New Instance variable created
         emp.name= "JAMES";
         emp.address = "JAMES ADDRESS";     

    }
}
  1. 组织正在创建一个员工实例(它将自己的一组值分配给员工)
  2. 同样,Organization2 也在创建一个员工实例(它将自己的一组值分配给员工)

问题: 因为这是两个不同的实例。这里是如何违反封装性的?

最佳答案

Employee 类违反了封装性。变量 nameaddress 是公共(public)的。它们应该设为私有(private),并且应该为它们定义 getter 和 setter。

关于java - java中封装的清晰性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276015/

相关文章:

typescript - 将接口(interface)和具体类放在一个文件中还是将它们分开放在不同的文件中?

python - 一个类的多个实例被覆盖

python - 使用 Python GUI (PySide) 元素的 OOP 技术

c# - 创建简单高效值类型的模式

java - 我的 Mac 上的 java 安装在哪里?

java - 将原始 long 数组转换为 Long 列表

java - Java中如何引用对象的字段?

java - 为什么 .add(i, E) 在 Java ArrayList 中大 O(n)?

Java - (非内部)可运行类中的 Actionlistener 不执行

vba - 为什么 VBA Me 关键字不能访问自己模块中的私有(private)过程?