Fork me on GitHub

Java从零开始学十三(封装)

一、什么是封装,为什么要封装

对面向对象而言:封装就是将方法和属性包装到一个程序单元中,并且这个单元以类的形式实现。

简单讲:封闭就是将属性私有化,提供公有方法来访问私有属性

封装的作用:

  • 封装反映和事物的相对独立性,封装在编程中的作用就是:使对象以外的部分不能随意更改对象的属性,从而有效避免了外部错误操作对此对象的影响
  • 提高松耦合性,代码重用性

松耦合:把对象想象成一个电池,这个电池不仅可以在相机中使用,也可以在遥控器,吹风机和剃须发等中使用, 我们说电池的松耦合性是非常好,而实现如此好的松耦合的前提就是对象有很好的封装性

二、封装的实现

  1. 属性私有化private
  2. 设置get/set方法
  3. 对属性设置必要的限制
package com.pb.demo3;

public class Person {
    private String name; //姓名
    private String sex;    //性别
    private int age;//年龄

    //设置getter和setter方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        if(sex.equals("男") || sex.equals("女")){
            //设置性别限制,不合法的值将提示错误
        this.sex = sex;
        }else{
            System.out.println("性别不合法,性别只能是:男或者女");
        }
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if(age>0 && age<=150){
            //设置年龄限制
        this.age = age;
        }else{
            System.out.println("年龄只能在1-150岁之间");
        }
    }
    public Person() {
    
    }
    public Person(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    
    public void say(){
        System.out.println("自我介绍:");
        System.out.println("姓名:"+this.name);
        System.out.println("性别:"+this.sex);
        System.out.println("年龄:"+this.age);
    }

}

测试类:

package com.pb.demo3;

public class PersonTest {

    public static void main(String[] args) {
        Person person=new Person();
        person.setName("韩冰");
        //传入不合法的值
        person.setSex("中性");
        //传入不合法的值
        person.setAge(200);
        //调用普通方法输出
        person.say();

    }

}

结果:将提示错误

性别不合法,性别只能是:男或者女
年龄只能在1-150岁之间
自我介绍:
姓名:韩冰
性别:null
年龄:0

从结果可以看出,不合法的值,将为该数据类型的初始值String 为null,int 为0

也可以在构造方法中为值进行初始化,这样,设置值为不合法时,就会使用初始化的值

public Person() {
        this.name = "无名氏";
        this.sex = "男";
        this.age = 22;
    }

再执行错误的值传入时

package com.pb.demo3;

public class PersonTest {

    public static void main(String[] args) {
        Person person=new Person();
        person.setName("韩冰");
        //传入不合法的值
        person.setSex("中性");
        //传入不合法的值
        person.setAge(200);
        //调用普通方法输出
        person.say();

    }

}

结果:

性别不合法,性别只能是:男或者女
年龄只能在1-150岁之间
自我介绍:
姓名:韩冰
性别:男
年龄:22

 

posted @ 2015-02-17 12:49  森林森  阅读(570)  评论(0编辑  收藏  举报