1.什么是封装
Java核心思想第五版中的定义为:
将数据和方法包装进类中并把具体实现隐藏被称作是封装(encapsulation)。
并举了个例子:
我们可以把编程的侧重领域划分为研发和应用。应用程序员调用研发程序员构建的基础工具类来做快速开发。
研发程序员开发一个工具类,该工具类仅向应用程序员公开必要的内容,并隐藏内部实现的细节。
这样可以有效地避免该工具类被错误的使用和更改,从而减少程序出错的可能。彼此职责划分清晰,相互协作。
当应用程序员调用研发程序员开发的工具类时,双方建立了关系。应用程序员通过使用现成的工具类组装应用程序或者构建更大的工具库。
如果工具类的创建者将类的内部所有信息都公开给调用者,那么有些使用规则就不容易被遵守。
因为前者无法保证后者是否会按照正确的规则来使用,甚至是改变该工具类。
只有设定访问控制,才能从根本上阻止这种情况的发生。
提取关键词
1)隐藏内部实现的细节---调用者不用关注细节,节约调用者开发成本
2)彼此职责划分清晰,相互协作---减少双方的耦合
3)正确的规则来使用---封装可以保护原有代码
4)设定访问控制---由控制修饰符(public、protected、默认、private)实现封装
2.封装的表现
封装具体表现就是Java中的一个个类,里面包含了数据(属性)和方法(操作属性),对外提供统一的接口或实现。
例如,工厂将引擎、轮胎等一系列材料(属性),鸣笛、行驶、装X等一系列行为(方法),封装成一辆汽车。
然后你买一辆莱斯劳斯(具体的实现),就可以愉快装X。
代码举例,创建Car类
package com.example.demo;
public class Car {
private String name;
public Car() {
System.out.println("叮里咣啷,汽车造好了");
}
public void drive() {
System.out.println(this.name + "跑起来,悲伤就追不上我");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
调用Car类
package com.example.demo;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
Car car = new Car();
car.setName("劳斯莱斯");
car.drive();
}
}
输出结果
3.封装的优点
1.隐藏细节,保护内部数据
2.减少耦合
3.提供统一接口或实现,利于代码复用
4.提供方法操作变量,更精细