1.什么是封装?
封装是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,仅对外提供公共访问方式。
封装: 封闭(安全), 包装/组装(把零散的组装成一个整体), 实际开发中, 编码,设计,都需要有整体思维, 如果一个方法需要多个参数, 使用封装思维, 把这些参数封装到一个类中
目的: 为了安全性(不可见), 化零为整
化零为整是一种面向对象的思维,将对象理解为一个完整的个体,对象有一定的特征(属性)和行为(方法),将这个整体进行封装,而不是访问零散某个变量,这也是整体性思维。
2.封装的功能?
封装的功能:
隐藏对象的实现细节
迫使用户通过指定方法访问数据,能保护对象的数据不被误修改
使代码更好维护, 使对象的重用变得更简单
3.java中封装的实现
封装可以通过访问修饰符来实现。在大多数面向对象编程语言中,有以下三种访问修饰符:
-
public:公共访问修饰符,表示该成员可以被任何代码访问。
-
private:私有访问修饰符,表示该成员只能被类的内部代码访问,外部代码无法访问。
-
protected:受保护的访问修饰符,表示该成员可以被类的内部代码和该类的子类访问,但外部代码无法访问。
在Java中,实现封装可以将类的成员变量声明为private,并提供公共的getter和setter方法来访问和修改这些变量。这样做可以防止外部代码直接访问和修改对象的内部状态,同时提供了一种更加受控的方式来访问和修改这些变量。
如:下列定义一个Student类
public class Student {
private String id; // 学号
private String name; // 姓名
private int age; // 年龄
private double grade; // 成绩
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age > 0 ) { // 控制数据的有效性
this.age = age;
}
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
this.grade = grade;
}
}
public class Test {
public static void main(String[] args) {
Student student = new Student(); // 创建Student类的对象student
student.age = -1 // 报错,无法进行属性age进行修改
student.setAge(-1);
studetn.getAge(); // 一定不是负数
}
}
为什么要对成员变量进行私有化(private)?
原因:保护数据的安全性和有效性。
将类的成员变量私有化(private)了,如果我们想要或者必须对成员变量进行访问了,我们又将如何来访问已经私有化(private)的成员变量呢?
解决方案:对外(不是在本类访问该方法的情况)提供一个相应的Setter和Getter方法(访问权限为:public)。即在本类之外,如果要对该属性进行访问,可通过该属性相应Setter和Getter方法(public)对该属性完成访问。在setter方法中,我们还添加了一些校验逻辑,以确保age在有效范围内。这样做可以防止外部代码直接访问和修改对象的内部状态,并提供了一种更加受控的方式来访问和修改这些变量.
4.封装的实际应用
项目中开发分层:
一个标准的javabean需满足什么条件?
1.成员变量使用private修饰。
2.提供每个成员变量对应的set和get方法。
3.必须提供一个无参构造器(一般情况下,默认有无参构造器)。
除此之外,封装思想应该贯彻到编码的各个阶段,比如说jdbc封装成dbutil工具。
他是将一些有共性的代码提取到一个方法中,供其他地方调用。