JavaSE面向对象之封装

来源:互联网 发布:卸载windows kits 编辑:程序博客网 时间:2024/04/29 04:44

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

/** * 封装的学习 * @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());    }}

这里写图片描述

我们可以看出在主函数中我们可以给对象的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());    }}

这里写图片描述
这里当我们输入一个不符合要求的数字时,程序会提示出错,并自动赋值22.
故使用封装,增加了数据访问限制,增强了程序的可维护性

封装的优点

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