JavaSE学习笔记(二)面向对象之封装

首先我们通过一个实例来感受一下封装:

/** * 封装的学习 * @author daoyuan * */

class Teacher{
    public int age;
    public String name;

    public String tell(){
        return "我是"+name+",我今年"+age;
    }
}
public class FengzhuangDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Teacher t = new Teacher();
        t.name="Tom";
        t.age=-10;
        System.out.println(t.tell());
    }

}

JavaSE学习笔记(二)面向对象之封装_第1张图片

我们可以看出在主函数中我们可以给对象的name属性赋值,可以正常运行但是却不符合常理,为了满足对于合理性的要求,这里我们要用到封装。

封装的定义

就是隐藏实现细节,将属性私有化,提供公有方法访问私有属性,通过这些公有方法访问私有属性 。

封装的实现

1、修改属性的可见性来限制对属性的访问
2、为每个属性创建一对赋值(setter)方法和取值(getter) 方法,用于对这些属性的访问
3、在setter和getter方法中,加入对属性的存取限制

对于上面的例子我们用封装再实现一遍:

class Teacher1{
    private String name;  
    private int age;          

    public int getAge() {
    return age;
    }
    public void setAge(int age) {
        if (age<0 || age>150) {
            System.out.println("错误");
            this.age=22;
        } else {
            this.age = age;
        }
     }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String tell(){
        return "我是"+name+",我今年"+age;
    }

}

public class FengzhuangDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Teacher1 t = new Teacher1();
        t.setName ("Tom");
        t.setAge(10);
        System.out.println(t.tell());

        Teacher1 t1 = new Teacher1();
        t1.setName ("Jim");
        t1.setAge(-10);
        System.out.println(t1.tell());
    }
}

JavaSE学习笔记(二)面向对象之封装_第2张图片
这里当我们输入一个不符合要求的数字时,程序会提示出错,并自动赋值22.
故使用封装,增加了数据访问限制,增强了程序的可维护性

封装的优点

    1、隐藏一个类的实现细节
    2、防止对封装数据的未经授权的访问
    3、有利于保证数据的完整性
    4、便于修改,增强代码的可维护性
    5、有选择地向外界提供数据

你可能感兴趣的:(java,se)