1.java面向对象编程三大特性之封装

封装即把一个对象的属性、行为等放在一个实体类中隐藏起来,不允许外部对其进行修改,但是被封装的属性、行为会对外提供一个接口与外部联系,这个对外的接口通常情况下就是set()get()方法。可以通过set()方法给属性设置值且可以在set()方法内部加入特定过滤条件,通过get()方法获取属性的值。

使用封装的三大好处:

(1).良好的封装能够减少耦合;

(2).可以对类的内部进行自由修改且不会对其他对象产生影响;

(3).隐藏具体信息和实现细节;

(4).可以对成员进行精确的控制;

代码实现:

(1).提供对外访问的方法:

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;
    }
}

(2).不提供对外访问的方法
public class Wife {
    private String name;
    private int age;
    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;
    }
    
}
(3).对set()这个访问入口做一些控制:
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){
            System.out.println("ERROR:error age input....");    //提示錯誤信息
        }else{
            this.age = age;
        }
        
    }
    
    /** 省略其他属性的setter、getter **/
    
}
(4).对get()出口做一些控制:
public String getSexName() {
        if("0".equals(sex)){
            sexName = "女";
        }
        else if("1".equals(sex)){
            sexName = "男";
        }
        else{
            sexName = "人妖???";
        }
        return sexName;
    }
以上内容均来自http://www.cnblogs.com/chenssy/博客,此博客为本人学习笔记
http://www.cnblogs.com/haohaoge/
原文地址:https://www.cnblogs.com/haohaoge/p/6428061.html