竭诚为您提供优质文档/双击可除
java实现协议封装
篇一:浅谈java封装
封装
封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。也就是说用户是无需知道对象内部的细节(当然也无从知道),但可以通过该对象对外的提供的接口来访问该对象。
使用封装有三大好处:
1、良好的封装能够减少耦合。
2、类内部的结构可以自由修改。
3、可以对成员进行更精确的控制。
4、隐藏信息,实现细节。
1.publicclasshusband{
2.
3./*
4.*对属性的封装
5.*一个人的姓名、性别、年龄、妻子都是这个人的私有属性
6.*/
7.privatestringname;
8.privatestringsex;
9.privateintage;
10.privatestringwife;
11.
12./*
13.*setter()、getter()是该对象对外开发的接口
14.*/
15.publicstringgetname(){
16.returnname;
17.}
18.
19.publicvoidsetname(stringname){
=name;
21.}
22.
23.publicstringgetsex(){
24.returnsex;
25.}
26.
27.publicvoidsetsex(stringsex){
28.this.sex=sex;
29.}
30.
31.publicintgetage(){
32.returnage;
33.}
34.
35.publicvoidsetage(intage){
36.this.age=age;
37.}
38.
39.publicvoidsetwife(stringwife){
40.this.wife=wife;
41.}
42.}
从上面两个实例我们可以看出:
封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果不想被外界方法,我们大可不必
提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
如果我们不使用封装,那么该对象就没有setter()和getter(),那么husband类应该这样写:
[java]viewplaincopyprint
1.publicclasshusband{
2.publicstringname;
3.publicstringsex;
4.publicintage;
5.publicstringwife;
6.}
我们应该这样来使用它:
[java]viewplaincopyprint
1.husbandhusband=newhusband();
2.husband.age=30;
="张三";
4.husband.sex="男";//貌似有点儿多余
但是那天如果我们需要修改husband,例如将age修改为string类型的呢?你只有一处使用了这个类还好,如果你有几十个甚至上百个这样地方,你是不是要改到崩溃。如果使用了封装,我们完全可以不需要做任何修改,只需要稍微改变下husband类的setage()方法即可。}
[java]viewplaincopyprint
1.publicclasshusband{
2.
3./*
4.*对属性的封装
5.*一个人的姓名、性别、年龄、妻子都是这个人的私有属性
6.*/
7.privatestringname;
8.privatestringsex;
9.privatestringage;/*改成string类型的*/
10.privatestringwife;
11.
12.publicstringgetage(){
13.returnage;
14.}
15.
16.publicvoidsetage(intage){
17.//转换即可
18.this.age=string.valueof(age);
19.}
20.
21./**省略其他属性的setter、getter**/
22.
其他的地方依然那样引用(husband.setage(22))保持
不变。
到了这里我们确实可以看出,封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。
我们在看这个好处:可以对成员变量进行更精确的控制。
还是那个husband,一般来说我们在引用这个对象的时
候是不容易出错的,但是有时你迷糊了,写成了这样:[java]viewplaincopyprint
1.husbandhusband=newhusband();
2.husband.age=300;
也许你是因为粗心写成了,你发现了还好,如果没有发现那就麻烦大了,逼近谁见过300岁的老妖怪啊!
但是使用封装我们就可以避免这个问题,我们对age的访问入口做一些控制(setter)如:
[java]viewplaincopyprint
1.publicclasshusband{
2.
3./*
4.*对属性的封装
5.*一个人的姓名、性别、年