11Java面向对象—封装

一、什么是封装

现实中的封装例如笔记本电脑把CPU、内存、主板、磁盘等都封装起来然后组合成可以使用的笔记本,只留出数据接口,网口等供用户使用.你不用管里面是怎么运行的,只需要动动鼠标、动动键盘就可以帮你完成某种功能。

Java中也是如此,把过程和数据包围起来,对数据的访问只能通过已定义的接口。实际上就是使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。

封装的原则:把该隐藏的隐藏起来,该暴露的暴露出来
封装好处:便于对代码的修改和维护,提高代码的可维护性

二、封装示例

以下为未封装之前,所有的东西都是可见,别人可以随便修改,这就导致很不安全。

public class Employee {
    public String name;
    public int age;
    public String gender;
    public void work(){
        System.out.printf("%s%d岁了还在努力工作中");
    }
}
//测试
public class Test {
    public static void main(String[] args) {
        Employee employee = new Employee();
        employee.age = 200;  //修改的年龄不合理
        employee.gender = "不男不女";  //修改非法性别
        employee.name = "卡里克隆";  //随便修改姓名
        employee.work();
    }
}

下面为封装之后,仅展示部分的东西为可见,这样别的类就看不见,也不能直接修改,但是我们可以提供修改的方法(get/set)供别人来修改和获取,当然也不能随意修改,我们可以在方法中判断别人的修改是否合理,对数据进行检查,这样就可以有效地保证了对象信息的完整性和合理性。

package com.etime01;

public class Employee {
    //使用private修饰成员变量
    private String name;
    private int age;
    private String gender;
    //提供公有的get/set方法
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public String getGender() {
        return gender;
    }
    //可以对信息进行校验
    public void setName(String name) {
        if(name.length() == 0){
            System.out.println("名字不能为空");
        }else{
            this.name = name;
        }
    }
    public void setAge(int age) {
        if(age<0 || age>140){
            System.out.println("年龄输入不合法");
        }else{
            this.age = age;
        }
    }
    public void setGender(String gender) {
        if(gender == "男" || gender =="女" || gender =="第三性别"){
            this.gender = gender;
        }else{
            System.out.println("性别输入错误");
        }
    }
    public void work(){
        System.out.printf("%s%d岁了还在努力工作中",this.name,age);
    }
}
package com.etime01;

public class Test {
    public static void main(String[] args) {
        Employee employee = new Employee();
        employee.setAge(-1);
        employee.setName("");
        employee.setGender("12");
        //输出初始化时候的默认值
        System.out.println(employee.getAge());
        System.out.println(employee.getName());
        System.out.println(employee.getGender());

        //符合要求
        employee.setAge(22);
        employee.setName("张三");
        employee.setGender("男");
        System.out.println(employee.getAge());
        System.out.println(employee.getName());
        System.out.println(employee.getGender());
    }
}

运行结果
运行结果

三、JavaBean

JavaBean,也称POJO类(简单的Java对象),通常用于存储数据。

特点:

  1. 成员属性的可见性为private
  2. 每个成员属性创建get/set方法实现取值/赋值。方法命名规则是将成员属性的首字母改为大写,再加上get或set前缀

例如:

public class Employee {
    private String name;
    private int age;
    private String gender;

    public String getName() {
        return name;
    }

    public void setName(String name) {
           this.name = name;   
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
           this.age = age;
    }

    public String getGender() {
        return gender;
    }
    
    public void setGender(String gender) {
           this.gender = gender;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值