封装 - 在同一类中使用getter?

时间:2015-11-29 15:07:25

标签: java class field encapsulation

我们假设我有这个简化的课程:

public class Employee {
   private final String name;
   private int age;
   private int salary;


   public Employee(String name, int age, int salary) {
      name = name;
      age = age;
      salary = salary;
   }

   public Employee(Employee copyEmployee) {
      name = copyEmployee.name;
      age = copyEmployee.age;
      salary = copyEmployee.salary;
   }

   public void riseSalary() {
      if(age > 40) {
         salary += 500;
      }
   }

   public int getAge() {
      return age;
   }

   public String getName() {
      return name;
   }

   public int getSalary() {
      return salary;
   }

   private void setSalary(int salary) {
      salary = salary;
   }
}

我将我的字段声明为私有。并且我通过getName(),getAge()和getSalary()向外部提供访问它们的值。

适当的封装是否要求我只从类方法中访问这些字段?

e.g。

public void riseSalara() {
   if(getAge() > 40) {
      setSalary(getSalary()+500);
   }
}

或者在我可以访问私有字段的copy-constructor中使用它们,因为它是相同的类类型?

我必须为作业编写一个类,其中一部分是使用封装"。但是,类字段只需要由同一个对象或同一个类的不同对象访问。一个人应该在封装中走多远?

1 个答案:

答案 0 :(得分:3)

封装是指将物品放入胶囊中,以便从外面看起来整洁。你在里面做的是你的选择。

目标在某种程度上,可以编写通过一个漂亮的界面暴露出来的最丑陋的代码。您可以每天更改该类中的代码,但不能更改界面,因为它需要隐藏“实现细节”。

有时使用内部getter和setter是有意义的,特别是如果这样可以减少代码重复,例如当需要在setter中强制执行规则时。将安装者和吸气剂视为您可以使用的方法。它们不是强制性的(在我看来,“正确的”OO始终是意见问题。)