封装的概念

现实生活中,封装的例子随处可见,如药店出售的胶囊类药品,我们只能看到胶囊,却看不到胶囊的材料和生厂工序;邮递的包裹,我们只能看到包裹外部的包装,却看不到里面的物品;电视机可以收看电视节目,却看不到电视机的组装技术等,这些都是现实生活中的封装。

封装是面向对象的三大特性之一,它 指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对家内部信息,而是通过该类所提供的方法实现对内部信息的操作和访问。

封装是面向对象编程语言对客观世界的模拟,客观世界中的属性均被隐藏在对象内部,外界无法直接操作和修改,如人的年龄属性只能随岁月的流逝而增加,通常不能随意修改人的年龄。对一个类或对象实现良好的封装, 可以实现以下目的:

(1)隐藏类的实现细节。

(2)让使用者只能通过事先预定的方法访问数据,从而可以在该方法中加入控制逻辑,限制对属性的不合理访

(3)可进行数据检查,从而有利于保证对象信息的完整性。

(4)便于修改,提高代码的可维护性。

实现良好的封装,需要从以下两个方面考虑:

(1)隐藏对象的属性和实现细节,不允许外部直接访问。

(2)暴露出方法,让方法控制对这些属性进行安全的访问和操作。

因此,封装实际上有两个方面的含义:隐藏该隐藏的,暴露该暴露的。这两个方面都需要通过使用Java提供的访问控制符来实现。

程序中的封装具体操作见示例

(1)创建Hero类,用于封装信息,代码如下:

public class Hero{

//使用private修饰属性,隐藏这些属性
private String name;

private int age;



public void setName(String name){

//执行合理校验,要求用户名必须在2 ~ 6之间
if(name length()> 6||name .length()<2){

System. out println(" 你输入的名字不符合要求 ");
return;

}elsef{

this.name = name;
}
}

public String getName() {
return name;

//提供方法操作age属性

public void setAge(int age) {

//执行合理校验,要求用户年龄必须在0 ~ 100之间if(age>100 || age<0)

System. out .printIn("你输入的年龄不合法")
return;

}else{

this.age=  age;




}
}

public int getAge() {
return age;







}
}

(2)创建HeroTest类,具体代码如下:

public class HeroTest {

public static void main(String[l args){

Hero hero=new Hero();

//因为Hero类中的age属性被隐藏,所以下述语句将出现编译错误

//hero.age= 1000;

”下述语句不会出现编译错误,但运行时将提示“您输入的年龄不合法”


//程序不会修改hero的age属性值

hero. setAge(1000);

//因为之前未成功设置hero的age属性,因此输出值为0

System. out. printIn("未成功设置age属性值时age属性值:” +hero getAge());


//成功修改hero的age属性

hero. setAge(30);

//因为之前成功设置了hero的age属性值,因此输出值为30

System.out. println("成功设置age属性值后age属性值:" +hero getAge());


hero.setName("恶魔巫师");

System.out. printin("成功设置name值后name属性值:" +hero.getName0);

通过上述程序,可以发现将类进行合理的封装,非常有助于提高程序的健壮性与合理性。