什么是封装以及如何使用它

什么是封装以及如何使用它

什么是封装?
java 中的封装就是隐藏某些东西如何工作的细节,同时仍然允许其他人使用它。您将数据(如变量)和方法(如函数)分组到一个单元中,称为类。您不是让每个人都直接访问您的数据,而是提供方法(getter 和 setter)来控制数据的访问或更改方式。这样,您可以保护您的数据并保持代码整洁和有条理,除非您愿意,否则不会让任何人扰乱内部运作。

使用方法
要在 java 中使用封装,您需要创建一个具有私有字段的类,并提供公共方法(如 getter 和 setter)来访问和修改这些字段。这确保了数据只能以受控方式更改。例如,如果您想创建一个 person 类,其中名称和年龄是私有的,您可以使用 getter 来检索值并使用 setter 来更新它们。操作方法如下:

public class person {
    // private fields
    private string name;
    private int age;

    // constructor
    public person(string name, int age) {
        this.name = name;
        this.age = age;
    }

    // getter for name
    public string getname() {
        return name;
    }

    // setter for name
    public void setname(string name) {
        this.name = name;
    }

    // getter for age
    public int getage() {
        return age;
    }

    // setter for age
    public void setage(int age) {
        if(age > 0) { // simple validation
            this.age = age;
        } else {
            system.out.println("age must be positive.");
        }
    }
}

// using the person class
public class main {
    public static void main(string[] args) {
        person person = new person("john", 25);

        // accessing fields using getters
        system.out.println(person.getname()); // output: john
        system.out.println(person.getage());  // output: 25

        // modifying fields using setters
        person.setname("jane");
        person.setage(30);

        system.out.println(person.getname()); // output: jane
        system.out.println(person.getage());  // output: 30
    }
}

让我们分解一下
让我们分解代码并逐步解释每个部分:

1. 带有私有字段的类定义
public class person {
    // private fields
    private string name;
    private int age;
}

解释:

这是 person 类,我们在其中定义了两个私有字段:name(字符串)和age(int)。通过将这些字段设置为私有,我们确保没有其他类可以直接访问或修改它们。这就是封装的核心思想——隐藏对象的内部状态。

2.构造函数
    // constructor
    public person(string name, int age) {
        this.name = name;
        this.age = age;
    }

解释:

构造函数在创建 person 对象时对其进行初始化。它需要两个参数:姓名和年龄,并将这些值分配给私有字段。这确保了当创建新的 person 对象时,它以有效数据开始。

3. getter 和 setter
    // getter for name
    public string getname() {
        return name;
    }

    // setter for name
    public void setname(string name) {
        this.name = name;
    }

解释:

构造函数在创建 person 对象时对其进行初始化。它需要两个参数:姓名和年龄,并将这些值分配给私有字段。这确保了当创建新的 person 对象时,它以有效数据开始。

4.年龄的getter和setter(带验证)
    // getter for age
    public int getage() {
        return age;
    }

    // setter for age
    public void setage(int age) {
        if (age > 0) { // simple validation
            this.age = age;
        } else {
            system.out.println("age must be positive.");
        }
    }

解释:

getter getage() 的工作方式与 name 的 getage() 方法相同,允许访问年龄字段。
setage() 方法不仅允许修改年龄字段,还添加了验证检查。 if 条件确保仅当年龄为正数时才设置年龄。如果提供了无效的年龄(例如负数),设置器将阻止更新并打印一条消息。这是封装如何让您控制可以设置的数据类型的示例。

5. 使用 person 类
// Using the Person class
public class Main {
    public static void main(String[] args) {
        Person person = new Person("John", 25);

        // Accessing fields using getters
        System.out.println(person.getName()); // Output: John
        System.out.println(person.getAge());  // Output: 25

        // Modifying fields using setters
        person.setName("Jane");
        person.setAge(30);

        System.out.println(person.getName()); // Output: Jane
        System.out.println(person.getAge());  // Output: 30
    }
}

解释:

在本节中,我们使用构造函数创建一个 person 对象(person)。构造函数将初始名称设置为“john”,年龄设置为 25。

然后,我们使用 getter(getname() 和 getage())来打印 name 和age 的值。之后,我们使用 setter(setname() 和 setage())来更新值。最后,再次使用 getter 打印更新后的值。

封装实践要点:

  • 数据保护:

    私有字段不能从类外部直接访问或修改。

  • 受控访问:

    getter 和 setter 提供了一种访问和修改私有字段的受控方式。

  • 验证:

    年龄的设置器演示了如何强制执行规则(例如,年龄必须为正)以保护数据免受无效输入的影响。

以上就是什么是封装以及如何使用它的详细内容,更多请关注www.sxiaw.com其它相关文章!