【Java进阶一】理解封装

封装
封装是Java的三大特性之一。封装顾名思义就是包装,在编程领域解释为信息隐藏,利用抽象的数据类型将数据和基于数据的操作封装在一起,构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的实现细节,只保留一些对外使用的方法或者接口来与外部发生联系。系统的其他对象只能通过封装在数据外层的一些有权限的操作(方法)来与这个对象发生交互。也就是我们无需知道对象内部的实现细节,但可以通过该对象开放的对方操作方法或接口来访问该对象。

使用封装的好处:

1、良好的封装能够减少耦合
2、类的内部结构可以自由的修改
3、类可以对成员进行更精确的控制
4、隐藏信息,实现细节

接下来我们看下对封装例子的理解:

public class Husband {
    public String name ;
    public String sex ;
    public int age ;
    public Wife wife;
}

如果我们要使用这个对象

Husband husband = new Husband();
        husband.age = 30;
        husband.name = "张三";
        husband.sex = "男";

如果哪一天项目当中这个类型的age属性要修改位String类型,而且用到这个类的地方有几百处,每个赋值都要改成字符串类型,工作量何其大。如果我们使用了封装,只需要稍微修改age属性和setter方法即可。

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 **/

}

在使用这种封装的方法下,项目中原先new出的实例的地方setAge保持不变,设置的int类型的年龄,但实际我们已经用了String类型。到了这里我们可以看出:封装可以很容易的让我们修改类内部的实现,而不需修改使用了该类的客户端代码。

    下面我们再来看几个简单的代码例子:
public class Husband {

    private String name ;
    private String sex ;
    private int age ;    //改成 String类型
    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;
    }

通过以上两个例子可以看出,封装能统一简化很多东西。在类中修改之后,无数用到该类的客户端代码统一修改。

对于封装就讲到这里。下节将讲述继承。

参考文章:http://www.cnblogs.com/chenssy/p/3351835.html

你可能感兴趣的:(Java进阶,java,对象,封装,封装的好处)