再论封装

一、封装

封装就是将属性私有化,提供公有的方法访问私有的属性。

*实现封装的步骤:
(1)修改属性的可见性来限制对属性的访问。
(2)为每个属性创建一对赋值方法和取值方法,用于对这些属性的访问。
(3)在赋值和取值方法中,加入对属性的存取限制。

**为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过
public的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和
赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()(Xxx
表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是
setXxx()用来对这个成员变量赋值。


**如果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,
就象一个人的身高,不能被外部随意修改,只能通过各种摄取营养的方法去修
改这个属性。

封装的优点:
(1)隐藏类的实现细节;
(2)让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制
     逻辑,限制对属性的不合理操作;
(3)便于修改,增强代码的可维护性

先来个例子看看;

public class Man
{
//对属性的封装,一个人的姓名,年龄,妻子都是这个对象(人)的私有属性
private String name;
private int age;
private Woman wife;
//对改人对外界提供方法的封装,可以设定妻子,姓名,年龄也可以获得男人的姓名和年龄
public void setWife(Woman wife)
{
  this.wife = wife;
}
public String getName()
{
  return name;
}
public void setName(String name)
{
  this.name = name;
}
public int getAge()
{
  return age;
}
public void setAge(int age)
{
  this.age = age;
}
}

public class Woman
{
//属性封装
private String name;
private int age;
private Man husband;
//方法封装
public String getName()
{
  return name;
}
public void setName(String name)
{
  this.name = name;
}
public int getAge()
{
  return age;
}
public void setAge(int age)
{
  this.age = age;
}
public Man getHusband()
{
  return husband;
}
public void setHusband(Man husband)
{
  this.husband = husband;
}
}
/**
* 仔细看就会发现,Man类没有提供getWife的方法,这是以为男人不想让自己的妻子被外界访问,
*
* 直接下来呢,就是封装可以吧一个对象的属性私有,而提供一些可以被外界访问的属性的方法,
*
* 比如说,name属性,Man和Woman类都有相应的get和set方法,外界都可以通过这些方法访问和修改
*
* 同时对一些改对象不想让外界访问的属性,就不提供其方法,比如说Man的wife属性,就没有get方法
*
* 外界是不能带到Man类的wife属性的
*
*/

上面那例子可能没有突出封装的好处,下面来个超简单的表达下:

public class Show
{
  public static void show(String str)
{
       System.out.println(str);
  }
}
上面就是对 System.out.println();的封装。

调用的时候 :
public class Use
{
  public static void main(String[] args)
{
       Show.show("封装");  
}
}
这样用的时候就不用使:System.out.println("封装");  
如果还有地方用到, 就省去了好多 System.out.println();

简而言之,有一段代码,如果3个程序要用它,你不封装,那你就得在这3个程序里都要写,浪费代码,浪费时间。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值