封装(encapsulation)
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式(隐藏了细节,我们只需要知道结果即可)
优点:将变化隔离、便于使用、提高重用性、提高安全性
封装原则:将不需要对外提供的内容都隐藏起来、把属性都隐藏,提供公共方法对齐访问
在java语言中,函数j就是最小的封装体。
类、包、框架也是一个封装体。
封装在生活中的例子如下:
例1:买来的电脑,把鼠标、键盘插入机箱,连接电脑后就可以直接使用,至于其中的CPU、硬盘等是如何工作的,我们是不需要知道,这就隐藏了其中的细节,但是用的时候怎么用的,怎么对外开发的,就是提供了一个公共的访问方式,USB口,提供给鼠标、键盘、显示器等。
例2:电脑坏了,寄去客服让维修,我们直接把电脑扔给它,至于怎么修的,我们不知道,我们只知道把电脑扔给它,它可以帮我们修好,不会像我们非专业的给修冒烟了就行。修理的过程我们不需要知道,我们只需要结果,电脑修好。
例3:老板招聘你,因为你有开发项目的经验,老板只需要这个项目可以做成,至于怎么做的,花了多长时间,流了多少血汗,老板皆不关心,老板只关心结果,项目做好。隐藏了你如何做的细节,找你这个对象,只要项目做成的结果即可。
封装在java中的代码例子如下:
class Person
{
private int age;
/*
private关键字 是私有的,权限修饰符,用于修饰类中的成员(成员变量,成员函数)
私有只有在本类中有效,因而主函数main()中p.age引用失败,出现错误
将age 私有化以后,类以外即使建立了对象也不能直接访问,
但是人应该有年龄,就需要在Person类中提供 对应访问age的方法,set、get方法对其进行访问,在这里就是 setAge()方法;
注意:私有仅仅是封装的一种表现形式,封装不是私有
之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句
对访问的数据进行操作,提高代码健壮性
*/
public void setAge(int a)
{
if(a>0 && a<130)
{
age=a;
speak();
}
else
System.out.println("非法 age");
}
public int getage()
{
return age;
}
void speak()
{
System.out.println("age="+age);
}
}
class Personone
{
public static void main(String[] args)
{
Person p=new Person();
// p.age=-20;
p.setAge(-40);
//p.speak();
}
}