(1)封装
1.1概念
通常情况下,可以在测试类中给成员进行赋值,给的值合法但不合理时,无论是编译阶段还是运行阶段都不会报错,此时出现与现实生活不符的情况,为了避免这种情况的发生,就需要对成员变量进行封包处理,这种技术叫封装,它是一种保障成员变量值合理性的一种机制.
首先创建一个猫类
public class Cat {
public int age;
public String color;
public Cat(){
}
public Cat(String color,int age){
setColor(color);
setAge(age);
}
public void setAge(int age){
this.age = age;
}
public void setColor( String color){
this.color = color;
}
public int getAge() {
return age;
}
public String getColor() {
return color;
}
public void show(){
System.out.println("颜色:"+getColor()+", "+"年龄:"+getAge());
}
}
创建一个测试类,进行测试
public class TestCat {
public static void main(String[] args) {
Cat c = new Cat("花花",-3);
c.show();
}
}
此时的运行结果为
显然年龄的运行结果与现实生活不符,为了避免这种问题的出现需要进行封装操作.
封装的流程
- 私有化成员变量.使用private进行修饰
- 提供公有的get/set方法并在set方法中进行合理值得判断
- 在构造方法中调用set方法
代码实现如下
public class Cat {
//1.私有化成员变量
private int age;
private String color;
public Cat(){
}
public Cat(String color,int age){
//3.再有参构造方法中调用set方法为成员变量赋值
setColor(color);
setAge(age);
}
//2.提供公有的get/set方法
public void setAge(int age){
//赋值时进行判断,如果满足进行赋值
if(age > 0){
this.age = age;
}else{
System.out.println("年龄不合理"); //为了方便现在此处使用println方法,正确操作应该使用异常操作,这里可以使用自定义异常进行操作
}
}
public void setColor( String color){
this.color = color;
}
public int getAge() {
return age;
}
public String getColor() {
return color;
}
public void show(){
System.out.println("颜色:"+getColor()+", "+"年龄:"+getAge());
}
}
封装后程序的运行结果
public class Cat {
private int age;
private String color;
public Cat(){
}
public Cat(String color,int age){
setColor(color);
setAge(age);
}
public void setAge(int age){
if(age > 0){
this.age = age;
}else{
System.out.println("年龄不合理"); //为了方便现在此处使用println方法,正确操作应该使用异常操作
}
}
public void setColor( String color){
this.color = color;
}
public int getAge() {
return age;
}
public String getColor() {
return color;
}
public void show(){
System.out.println("颜色:"+getColor()+", "+"年龄:"+getAge());
}
}
可以看到这时的年龄的值为零,不合理的值赋值给年龄失败.这就是封装的作用