1.概念
- 封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
- 封装是为了保护数据,这里的数据是指对象的属性(不是方法的局部变量)。
保护数据中的保护是什么意思?保护是指对数据的读写权限。
2.封装的实现
封装是靠访问修饰符和getter and setter方法来实现的。
2.1 访问修饰符
- public:公共的
被public关键字修饰的属性或方法可以在任意位置被访问,没有使用的权限。 - protected:受保护的
被protected关键字修饰的属性或方法只能在同一个包中的所有类和不同包中的子类访问,出了一个包但不是该类的子类的话就不可以访问。 - 默认|default(什么都不写)
default关键字修饰的属性或方法只能在同一个包中的所有类访问,且必须是同级的包,在一个包中的子包也不可以访问。但我们在定义属性和方法时不需要将default关键字写出来,没有关键字修饰的属性或方法就是default的访问权限。 -
private:私有的
示意图:
用private关键字修饰的属性和方法只能在该类的大括号内访问,出了这个类就不能被访问了。当一个子类继承一个父类的属性和方法时,若父类的属性或方法被private修饰,那么子类也不可以继承该属性或方法。
2.2 getter and setter
getter 和 setter 是用public修饰的用来读取和修改类中受访问权限的属性的get()和set()。以private最为典型。
3.示例
以私有为例
public class Student {
private String name;
private int score;
private String no;
public Student() {
}
public Student(String name, int score, String no) {
this.name = name;
this.score = score;
this.no = no;
}
public String getName() { //获取name属性
return name;
}
public void setName(String name) { //修改name属性
this.name = name;
}
public int getScore() { //获取score属性
return score;
}
public void setScore(int score) { //修改score属性
this.score = score;
}
public String getNo() { //获取no属性
return no;
}
public void setNo(String no) { //修改no属性
this.no = no;
}
}
private修饰的属性到其他类使用就会报错如下图:
此时需要调用get()和set()来实现调用
public class Test {
public static void main(String[] args) {
Student student = new Student("张三",90,"123456");
System.out.println(student.getName()); //获取当前学生姓名
student.setName("李四"); //修改学生姓名为李四
System.out.println("修改后的学生姓名"+student.getName()); //获取修改后的学生姓名
}
}