共计 2497 个字符,预计需要花费 7 分钟才能阅读完成。
1、封装概述
1.1、什么是封装
成员变量都是隐藏在对象内部的,外界无法直接操作和修改。
封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。
1.2、封装的原则
将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
1.3、封装步骤
private 修饰成员变量
对需要访问的成员变量,提供对应的一对 get/set 方法
1.4、案例
** 需求:** 编写一个类中得到生日的方法
分析:
① 类的成员变量可以成为只读或者只写的。比如用:访问器 getXxxx(); 或者修改器 setXxxx();
② 类可以对储存在其中的成员变量中的内容有一个整体的控制。可以根据访问修饰符的提点在其它类中调用该类中的属性和行为。
③类的用户不需要知道类是如何储存数据的。
public String getBirthday(){return year + "-" + month + "-" + day;
}
public void setBirthday(String birthday){// 拆分字符串,分别取出年月日, 给 year、month、day 进行赋值
}
而在外部调用这个方法的时候
this.getBirthday();
this.setBirthday("1990-9-9");
此时就体现出外部是不知道如何储存 birthday 这个方法的,用户只能调用它。
2、封装实现
2.1、private 修饰属性
修改属性的可见性来限制对属性的访问(一般限制为 private)
public class Person{private String name;
private int age;
}
这段代码中,将 name 和 age属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2.2、公共方法访问
对每个值属性提供对外的公共方法访问,也就是创建一对赋值取值方法,用于对私有属性的访问。
public class Person{private String name;
private int age;
public int getAge(){return age;
}
public String getName(){return name;
}
public void setAge(int age){this.age = age;
}
public void setName(String name){this.name = name;
}
}
我们将 name,age 属性私有化,那么除了 Person 这个类以外其他地方都不能使用他,所有这个时候,我们选择了全局的 set,get 方法,来为我们的属性 name,age 来存放值和取值。
采用 this 关键字是为了解决成员变量(private String name)和局部变量(setName(String name)中的 name 变量)之间发生的同名的冲突。
2.3、案例
public class Encap{private String name;
private String idNum;
private int age;
// 声明 set,get 方法初始化与获取
public int getAge(){return age;
}
public String getName(){return name;
}
public String getIdNum(){return idNum;
}
public void setAge(int newAge){age = newAge;}
public void setName(String newName){name = newName;}
public void setIdNum(String newId){idNum = newId;}
}
public class EncapDemo{public static void main(String args[]){Encap encap = new Encap();
// 创建对象,通过对应的 set 方法,初始化
encap.setName("James");
encap.setAge(20);
encap.setIdNum("12343ms");
System.out.print("Name :" + encap.getName()+ "Age :"+ encap.getAge());
}
}
运行结果:
我们在调用我们的属性 name,age 的时候,使用了,set,get 方法,那么这就是一个典型的封装。
3、javaBean
JavaBean 是 Java 语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的 set 和 get 方法。
3.1、格式
public class ClassName{// 成员变量
// 构造方法
// 无参构造方法【必须】每个类都有一个默认的无参的构造方法
// 有参构造方法【建议】
// 成员方法
//getXxx()
//setXxx()
}
3.2、案例
需求:编写一个 javaBean 规范的类,以动物类为例。
public class DongWu{private String name;
private int age;
// 构造方法, 默认可不写
public DongWu(){ }
// 有参的构造方法
public DongWu(String name,int age){this.name=name;
this.age=age;
}
// 成员方法
public void setName(String name) {this.name = name;
}
public String getName() {return name;
}
public void setAge(int age) {this.age = age;
}
public int getAge() {return age;
}
}
public class DongWuDemo {public static void main(String[] args) {// 无参构造使用
DongWu s= new DongWu();
s.setName("猫");
s.setAge(2);
System.out.println(s.getName()+"‐‐‐"+s.getAge());
}
}
运行结果: