成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。
将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
private修饰成员变量
对需要访问的成员变量,提供对应的一对get/set方法
**需求:**编写一个类中得到生日的方法
分析:
① 类的成员变量可以成为只读或者只写的。比如用:访问器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这个方法的,用户只能调用它。
修改属性的可见性来限制对属性的访问(一般限制为private)
public class Person{
private String name;
private int age;
}
这段代码中,将name和 age属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
对每个值属性提供对外的公共方法访问,也就是创建一对赋值取值方法,用于对私有属性的访问。
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变量)之间发生的同名的冲突。
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方法,那么这就是一个典型的封装。
JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的 set 和 get 方法。
public class ClassName{
//成员变量
//构造方法
//无参构造方法【必须】 每个类都有一个默认的无参的构造方法
//有参构造方法【建议】
//成员方法
//getXxx()
//setXxx()
}
需求:编写一个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());
}
}
运行结果: