一、封装介绍
封装(encapsulation)就是把抽象出的数据属性和对数据的操作方法封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作方法,才能对数据进行操作。
封装的主要目的是保护对象的内部状态,防止外部代码随意修改对象的数据,同时提供清晰的接口供外部代码使用。
二、封装的实现步骤
1)将属性进行私有化private【不能直接修改属性】
2)提供一个公共的(public)set方法,用于对属性判断并赋值public void setXxx(类型参数名){//Xxx表示某个属性//加入数据验证的业务逻辑属性=参数名;
3)提供一个公共的(public)get方法,用于获取属性的值public数据类型getXxx(){//权限判断,Xxx某个属性return xx;
以下是一个简单的Java类,展示了如何实现封装:
public class Person {
// 私有属性
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 公共的getter方法,用于获取私有属性的值
public String getName() {
return name;
}
// 公共的setter方法,用于设置私有属性的值
public void setName(String name) {
this.name = name;
}
// 公共的getter方法
public int getAge() {
return age;
}
// 公共的setter方法
public void setAge(int age) {
if (age >= 0) { // 可以加入验证逻辑
this.age = age;
} else {
throw new IllegalArgumentException("Age cannot be negative");
}
}
// 其他方法,如toString()
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
在这个Person
类中,name
和age
属性被声明为private
,这意味着它们只能在Person
类内部被访问。外部代码不能直接访问或修改这些属性,而必须通过类提供的getName()
、setName()
、getAge()
和setAge()
方法来访问或修改这些属性的值。
setName()
和setAge()
方法是setter方法,用于设置私有属性的值。getName()
和getAge()
方法是getter方法,用于获取私有属性的值。这些方法被声明为public
,这意味着它们可以在Person
类的外部被访问。
封装不仅提供了数据的隐藏和保护,还允许我们在setter方法中加入验证逻辑,以确保数据的有效性。例如,在setAge()
方法中,我们检查年龄是否为非负数,如果不是,则抛出一个异常。
封装是面向对象编程中的一个核心概念,它有助于创建可维护、可扩展和可重用的代码。