在介绍封装和隐藏前,先复习一下两个属性修饰符的用法:
- public:该属性可以被该类及该类以外的方法访问。
- private:该属性只能由该类的方法访问。
JAVA的使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。
我们先来看这样一段代码:
定义一个Person类,设置age属性和printAge方法
public class Person{
public int age;
public void printAge(){
System.out.println("年龄是" + age);
}
}
Test program调用Person类
。
public class Test{
public static void main(String[]args){
Person p = new Person();
p.age = -80;
p.printAge();
}
}{这个program输出结果为:"年龄是-80"}
这个program是可以正常运行的。但是输出结果:年龄是-80.显然是不符合正常逻辑的。
这种情况下就需要对代码进行封装处理。
下面来看一下如何对上述Person类的属性age进行封装。
这里利用private关键字使得其他类无法调用此处的属性。再利用setAge这个方法对age属性进行大小限制
public class Person{
private int age;
public void printAge(){
System.out.println("年龄是" + age);
}public int getAge(){
return age;
}public void setAge(int a){
if(a>=0 && a<=150){
age = a;
}else{
System.out.println("输入的年龄"+a+"不在0~150之间");
}
}
}
这里的Test类只对Person类的方法进行了调用
public class Test{
public static void main(String[]args){
Person p = new Person();
p.setAge(-150);
p.getAge();
p.printAge();
}
}{输出结果为:“输入的年龄:-150 不在0-150之间
年龄是:0”}
Java中通过将数据声明为private,再提供public方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
- 隐藏一个类中不需要对外提供的实现细节;
- 使用者只能通过事先制定好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
- 便于修改、增强代码的可维护性。