java中encapsulation_JAVA 面向对象 封装 (Encapsulation)

封装 (Encapsulation)

提供借口、隐藏内部实现

封装(Encapsulation)是将抽象性函式接口的实现细节部份包装、隐藏方法。

可被认为是一个保护屏障,防止类内部的代码和数据,被外部类定义的代码随机访问。

访问该类的代码和数据,必须通过严格的接口控制。

封装最主要功能:能修改自己的实现代码,而不用修改那些调用代码的程序片段。

适当的封装可以让程序更容易理解与维护,也加强了程序的安全性。

封装的优点

1. 良好的封装能够减少耦合。

2. 类内部的结构可以自由修改。

3. 可以对成员变量进行更精确的控制。

4. 隐藏信息,实现细节。

实现Java封装

//丈夫类

public class Husband {

/*

* 对属性的封装

* 人的姓名、性别、年龄、妻子都是这个人的私有属性

*/

private String name ;

private String sex ;

private int age ;

private Wife wife;

/*

* setter()、getter()是该对象对外开发的接口

*/

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public void setWife(Wife wife) {

this.wife = wife;

}

}

//妻子类

public class Wife {

//人名、年龄、性别、丈夫

private String name;

private int age;//没有对应的getAge

private String sex;

private Husband husband;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public void setAge(int age) {

this.age = age;

}

public void setHusband(Husband husband) {

this.husband = husband;

}

public Husband getHusband() {

return husband;

}

}

封装把对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果不想被外界方法访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。

使用

使用方法

Husband husband = new Husband();

husband.age = 30;

husband.name = "张三";

husband.sex = "男"; //有点多余

如果需要修改Husband,将age修改为String类型的呢?

只有一处使用了这个类还好,如果你有几十个甚至上百个这样地方,你是不是要改到崩溃。

如果使用了封装,我们完全可以不需要做任何修改,只需要稍微改变下Husband类的setAge()方法即可。

public class Husband {

/*

* 对属性的封装

* 一个人的姓名、性别、年龄、妻子都是这个人的私有属性

*/

private String name ;

private String sex ;

private String age ; /* 改成 String类型的*/

private Wife wife;

public String getAge() {

return age;

}

public void setAge(int age) {

//转换即可:无需修改任何引用、只修改内部实现

this.age = String.valueOf(age);

}

/** 省略其他属性的setter、getter **/

}

封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。

可以对成员变量进行更精确的控制、属于参数校验

Husband husband = new Husband();

husband.age = 300;

//上面问题无意输入300、应该不会有人能活到300岁

public class Husband {

/*

* 对属性的封装

* 一个人的姓名、性别、年龄、妻子都是这个人的私有属性

*/

private String name ;

private String sex ;

private int age ;

private Wife wife;

public int getAge() {

return age;

}

public void setAge(int age) {

if(age > 120 || age < 0){

System.out.println("ERROR:error age input...."); //提示錯誤信息

}else{

this.age = age;

}

}

/** 省略其他属性的setter、getter **/

}

使用封装能够对对象的接口做出很好的控制

public String getSexName() {

if("0".equals(sex)){

sexName = "女";

}

else if("1".equals(sex)){

sexName = "男";

}

else{

sexName = "未知";

}

return sexName;

}

可针对不同的状态做出不同的操作。

public String getCzHTML(){

if("1".equals(zt)){

czHTML = "启用";

}

else{

czHTML = "禁用";

}

return czHTML;

}

信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值