-
概念:
就是通过访问权限修饰符修饰 类或者类中的成员,而达到保护内部成员安全的目的,就是封装。
访问权限修饰符:控制访问范围
public 公共的,最大权限,被其修饰的成员,在任意包下、类中,都可以访问到 (所有类)
protected 受保护的,在同包类和子类中都可以访问
默认不写 只能在同包类中访问
private 私有化的,被其修饰的成员,只能在当前类中访问 -
作用:
保护内部数据 -
使用场景:
1.不希望在外部类中随意访问类中的成员变量
2.达到权限要求的才能访问。
3.只是获取数据的时候,例如 单例模式 -
步骤:
1.私有化成员变量(用private修饰成员变量)
2 为每一个成员变量提供合理的返回值类型 getXxx()方法 获取成员变量的值,如果当前成员变量类型是boolean类型,将getXxx()改为 isXxx()
void setXxx(…)方法 设置成员变量的值
3.提供一个无参构造
4.该类用public修饰 -
例子
业务类为Account ;测试类为AccountTest
业务类:Account
package package1;
/**
* 封装
* 1.概念,就是通过访问权限修饰符修饰 类或者类中的成员,而达到保护内部成员安全的目的,就是封装。
访问权限修饰符:控制访问范围
public 公共的,最大权限,被其修饰的成员,在任意包下、类中,都可以访问到 (所有类)
protected 受保护的,在同包类和子类中都可以访问
默认不写 只能在同包类中访问
private 私有化的,被其修饰的成员,只能在当前类中访问
2. 封装作用:
1. 保护内部数据
3. 使用场景:
1. 不希望在外部类中随意访问类中的成员变量
2. 达到权限要求的才能访问。
3. 只是获取数据的时候,例如 单例模式
* 4.封装步骤:
* 业务类:成员变量包括:name,password,money,vip修饰符用private
*
* 步骤: 1. 私有化成员变量(用private修饰成员变量)
2. 为每一个成员变量提供合理的
返回值类型 getXxx()方法 获取成员变量的值,如果当前成员变量类型是boolean类型,
将getXxx()改为 isXxx()
void setXxx(...)方法 设置成员变量的值
3. 提供一个无参构造
4. 该类用public修饰
* @author
*/
public class Account {
/** String 类型的成员变量name 私有化成员变量,用private修饰 */
private String name;
/** String类型的成员变量pwd 私有化成员变量,用private修饰 */
private String pwd;
/** double类型的成员变量money 私有化成员变量,用private修饰 */
private double money;
/** boolean类型的成员变量vip 私有化成员变量,用private修饰 */
private boolean vip;
//无参构造
public Account() {};
//有参构造
public Account(String n,String p,double m,boolean v){
name = n;
pwd = p;
money = m;
vip = v;
}
/**
* 定义方法getName,获取name的值。
* @return
*/
public String getName() {
return name;
}
/**
* 定义方法getPwd,获取pwd的值。
* @return
*/
public String getPwd() {
return pwd;
}
/**
* 定义方法getMoney,获取money的值。
* @return
*/
public double getMoney() {
return money;
}
/**
* 定义方法isVip,获取vip的值。
* @return
*/
public boolean isVip() {
return vip;
}
/**
* 定义方法setName,给成员变量赋值。
* @param n 赋值给成员变量name的值。
*/
public void setName(String n) {
name = n; // 将局部变量n赋值给成员变量name
}
/**
* 定义方法setPwd,给成员变量赋值。
* @param p 赋值给成员变量pwd的值。
*/
public void setPwd(String p) {
pwd = p; // 将局部变量p赋值给成员变量pwd
}
/**
* 定义方法setMoney,给成员变量赋值。
* @param m 赋值给成员变量money的值。
*/
public void setMoney(double m) {
money = m; // 将局部变量m赋值给成员变量money
}
/**
* 定义方法setVip,给成员变量赋值。
* @param v 赋值给成员变量vip的值。
*/
public void setVip(Boolean v) {
vip = v; // 将局部变量m赋值给成员变量money
}
}
测试类AccountTest
package package1;
/**
* Account测试类
* 封装的引入
* @author
*
*/
public class AccountTest {
public static void main(String[] args) {
Account acc1 = new Account();
//acc1.name = "大黑蛋子";// 报错,对象acc1中name成员变量为私有成员变量,不能直接赋值,那么怎么半?我们直接用有参构造来赋值。
Account acc2 = new Account("大黑蛋子" , "123456" , 100 , false);
//System.out.println(acc2.name);// 报错,对象acc2中成员变量为私有成员变量,不能使用,此时我们可以在业务类Account中通过方法来得到,此时我们调用方法getName
String name = acc2.getName();//得到了name的值。
String pwd = acc2.getPwd();
boolean vip = acc2.isVip();
double money = acc2.getMoney();
System.out.println("acc2的名字为 :" + name);// 打印结果:acc2的名字为 :大黑蛋子。若要修改name的值,那么需要在业务类Account中定义方法setName来进行修改
System.out.println("acc2的密码为 :" + pwd);// acc2的密码为 :123456
System.out.println("acc2是否为vip :" + vip);// acc2是否为vip :false
System.out.println("acc2的钱是 :" + money);// acc2的钱是 :100.0
acc2.setName("大脸盘子");
acc2.setPwd("147258369");
acc2.setMoney(200);
acc2.setVip(true);
//重新调用get方法,得到新的值
String name1 = acc2.getName();//得到了name的值。
String pwd1 = acc2.getPwd();
boolean vip1 = acc2.isVip();
double money1 = acc2.getMoney();
System.out.println("acc2的名字目前为 :" + name1);// 打印结果:acc2的名字为 :大脸盘子
System.out.println("acc2的密码目前为 :" + pwd1);// acc2的密码为 :147258369
System.out.println("acc2目前是否为vip :" + vip1);// acc2是否为vip :true
System.out.println("acc2的钱目前是 :" + money1);// acc2的钱是 :200.0
}
}
运行结果为:
acc2的名字为 :大黑蛋子
acc2的密码为 :123456
acc2是否为vip :false
acc2的钱是 :100.0
acc2的名字目前为 :大脸盘子
acc2的密码目前为 :147258369
acc2目前是否为vip :true
acc2的钱目前是 :200.0