Java 封装
- 概念:
封装(Encapsulation)是Java的三大特性之一,顾名思义,封装就是把东西包起来,不允许用户直接操作被隐藏的信息,而是通过定义好的方法来访问和更新被包起来的信息。
- 目的:
封装的目的就是提供安全保障,封装代码实现细节,防止用户随意操作类属性让系统崩溃。同时方便后期维护,保护对象信息的完整性。
封装原则:
- 把成员变量(属性)和代码实现细节隐藏起来,不允许外部直接访问。
- 提供相应的访问和更新方法,也就是也就是属性私有,提供get/set方法。
- 总的来说就是该露的露,该藏的藏,追求“高内聚,低耦合”。高内聚就是指操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
封装的实现步骤:
封装设计 具体步骤 1. 修改属性的可见性设为 private 2. 提供getter/setter方法 用于访问、更新属性的值 3. 在getter/setter方法中加入属性控制语句 对属性值的合法性进行判断 Java中的访问控制符:
访问修饰符 本类 同包 子类 其他 private ✔ default ✔ ✔ protected ✔ ✔ ✔ public ✔ ✔ ✔ ✔ - private:当前类中可以访问
- default:在当前包内可以访问
- protected:在当前类和它的派生类可以访问
- public:公共访问权,谁都能访问
代码实例:
创建类,并让属性私有:
public class Student { private String name; //名字 private int id; //学号 private String sex; //性别 }
从上面的修饰符访问权限可以看到,private(私有)只有本类能访问,要想其他类也能访问,则需要额外提供公共方法访问(IDEA中 快捷键 Alt + Insert 快速插入getter/setter)。
public class Student { private String name; //名字 private int id; //学号 private String sex; //性别 male or female public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
具体测试代码:
//Application.java package com.zctou.oop; import com.zctou.oop.demo03.Student; public class Application { public static void main(String[] args) { Student student1 = new Student(); student1.setName("再重头"); System.out.println(student1.getName()); } } //Student.java package com.zctou.oop.demo03; public class Student { private String name; //名字 private int id; //学号 private char sex; //性别 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } } //输出: 再重头
前面提过:可以在getter/setter方法中加入属性控制语句过滤非法数据。
如 sex学生类的性别,不是male就是female,第三种是不存在的,所以在sex 的setter方法中加入控制代码即可。
public void setSex(String sex) { if(sex.equals("male") || sex.equals("female")) { this.sex = sex; } else { System.out.println("性别有误!是男人请输入male,是女人输入female"); } }
测试:
public static void main(String[] args) { student.setSex("a"); System.out.println(student.getSex()); //性别有误!是男人请输入male,是女人输入female null student.setSex("male"); System.out.println(student.getSex()); // male }
文章目录