java se7 与6_[javase学习笔记]-6.7 封装

这一节我们学习面向对象中的第一个特性,封装(encapsulation)

封装:是指隐藏对象的发生和实现细节,仅对外提供公共訪问方式.

那么什么是隐藏对象的实现细节?

我们来举例学习.

比方我们来定义一个人的类,简单点说,人的属性有年龄,行为有说话.

我们看以下的代码:

class Person//定义一个人的类

{

int age;

void speak()

{

System.out.println("age = "+age);

}

}

class PersonDemo//定义測试类

{

public static void main(String[] args)

{

Person p = new Person();

p.age = -20;//这时代码仍然正常执行了,这就造成了安全隐患

p.speak();

}

}

结果:

c63ae852967b9d4e9e14017e9d3d7cd8.png

我们看到存在安全隐患,当我们为人的年龄属性赋值为负数时,程序是正常执行的.

那么如今把Person类改动一下

class Person

{

private int age;

void speak()

{

System.out.println("age = "+age);

}

}

结果:

3a159b5c35aa4a1fd2b3b1e68c5474d8.png

我们看到报错了,由于我们对age进行了私有,在PersonDemo类中无法訪问.

为了进一步解决这个问题,我们再对两个类进行改动:

class Person

{

private int age;//把该成员属性设置为私有

public void setAge(int a)

{

if(a>0 && a<130)

{

age = a;

speak();

}

else

System.out.println("错误的数据");

}

void speak()

{

System.out.println("age = "+age);

}

}

class PersonDemo

{

public static void main(String[] args)

{

Person p = new Person();

p.setAge(-20);//调用方法设置年龄,可是我们不知道该方法的内部实现

}

}结果:

71e3da5d77c437367ee5e34cddfde82b.png

我们看到当age>0 && age<130时,才合法.

从这个过程我们看到,当我们要操作Person中的age属性时,是通过setAge方法来实现的,可是setAge方法是怎么实现的,外部类是无法知道的,这就是我们所要说的隐藏对象的属性和实现细节,也就是封装.

事实上对于属性的封装,为了外部訪问,我们一般有规范的get和set方法,我们来看一下两个规范且经常使用的方法:

class Person

{

private int age;//把该成员属性设置为私有

public void setAge(int a)//设置年龄

{

age = a;

}

public int getAge()//获取年龄

{

return age;

}

}

以下我们再来说说封装的长处和原则:

长处:

1.提高代码安全性;

2.实现对内部属性的可控性;

3.提高代码的复用性;

4.隔离变化;

原则:

1.将不须要对外提供的内容都隐藏起来;

2.把属性都隐藏起来,提供公共方法供外部訪问(当然不是全部方法都必须是公共方法).

最后我们再看一下刚才我们用到的一个keyword:private.

privatekeyword:指私有,是一个权限修饰符,用于修饰成员.私有的内容仅仅在本类中有效.

它的常见使用方法:就是将成员变量私有化,对外提供相应的set,get方法对其进行訪问.提高对数据訪问的安全性.

注意:私有不过封装的一种体现而已.

对于java语言来讲,最小的封装体就是函数.类也是封装体.框架本身也是封装体.这些都一个共性,就是我们能够不知道实现细节,直接拿来用就能够了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值