
Java封装属于面向对象的三大特征之一,本篇我们重点详解Java封装的定义、优点、实现与示例。
Java封装定义
Java封装从字面上来理解就是包装的意思,是将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。
数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,也就是说用户是无需知道对象内部的细节,但可以通过该对象对外的提供的接口来访问该对象。
一句话总结:封装=私有化属性+公共调用属性的方法。
Java封装作用
使用封装有四大好处:
1、高内聚:封装细节,便于修改内部代码,提高可维护性;
2、低耦合:简化外部调用,便于调用者使用,便于扩展和协作;
3、安全性:提高代码的安全性,隐藏细节实现;
4、复用性:提高代码的复用性。
Java封装实现
Java是使用“访问控制符”来控制哪些细节需要封装,类的访问控制符只能是空或者 public,方法和属性的访问控制符有 4 个,分别是 public、 private、protected 和 friendly。
访问控制修饰符的权限,如下表所示:

上图说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。
Java中的封装是使用访问修饰符private 、protected和public实现的。
Java封装示例
public class Cat {
private String name;
private String type;
private int age;
public Cat(){
}
//定义有参构造,方便实例化对象时,初始化值
public Cat(String name, String type, int age) {
this.name = name;
this.type = type;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//type(品种)属性只可以读取,不可以写入
public String getType() {
return type;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age<0||age>20){
System.out.println("猫的年龄输入有误,请检查后重新输入!!!!");
return;
}
this.age = age;
}
public void showInfo(){
System.out.println("猫的名字为: "+name+" 猫的品种为: "+type+" 猫的年龄为: "+age);
}
}
public static void main(String[] args) {
//猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
Cat cat=new Cat("叮当","狸花猫",8);
System.out.println("一年前: ");
cat.showInfo();
cat.setName("小梦");
System.out.println("获取猫的品种: "+cat.getType());
cat.setAge(9);
System.out.println("一年后: ");
cat.showInfo();
}
关于mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。