文章目录
- 信息的封装和隐藏
信息的封装和隐藏
Java 中通过将数据声明为私有的 (private) 变量, 再提供 公共的( public )方法 :getXxx()
和 setXxx()
实现对该属性的操作,以实现下述目的:
- 隐藏一个类中不需要对外提供的实现细节;
- 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
- 便于修改,增强代码的可维护性;
举例说明:
创建一个person类
package day06;
public class Person {
public int age;//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题。所以需要封装和隐藏
public void printAge() {
System.out.println("年龄是:" + age);
}
}
编写Test.java对Person类进行调用:
package day06;
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.age = -100;//这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑
p.printAge();
}
}
运行结果:
但是,这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑
对上述代码进行改写:使用封装和隐藏
改写Person类:
package day06;
public class Person {
// public int age;//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题。所以需要封装和隐藏
//我们需要对这样的不能让调用者随意使用的属性做封装和隐藏
private int age;
public void printAge() {
System.out.println("年龄是:" + age);
}
public void setAge(int a) {
if(a <= 150 && a >= 0) {
age = a;
}else {
System.out.println("输入的年龄:" + a + "不在0~150之间");
}
}
}
改写Test.java:
情况1:这次仍然将age赋值-100,看一下运行结果会有什变化?
package day06;
public class Test {
public static void main(String[] args) {
Person p = new Person();
// p.age = -100;//这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑
//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题
p.setAge(-100);
p.printAge();
}
}
运行结果:
因为-100不在Person类中setAge所设定的年龄范围,所以最后输出的是age的默认值0。
情况2:将age赋值12
package day06;
public class Test {
public static void main(String[] args) {
Person p = new Person();
// p.age = -100;//这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑
//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题
p.setAge(12);
p.printAge();
}
}
运行结果:
小结: