我们假设我有这个简化的课程:
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中使用它们,因为它是相同的类类型?
我必须为作业编写一个类,其中一部分是使用封装"。但是,类字段只需要由同一个对象或同一个类的不同对象访问。一个人应该在封装中走多远?
答案 0 :(得分:3)
封装是指将物品放入胶囊中,以便从外面看起来整洁。你在里面做的是你的选择。
目标在某种程度上,可以编写通过一个漂亮的界面暴露出来的最丑陋的代码。您可以每天更改该类中的代码,但不能更改界面,因为它需要隐藏“实现细节”。
有时使用内部getter和setter是有意义的,特别是如果这样可以减少代码重复,例如当需要在setter中强制执行规则时。将安装者和吸气剂视为您可以使用的方法。它们不是强制性的(在我看来,“正确的”OO始终是意见问题。)