首页 > 代码库 > JavaSE基础之封装

JavaSE基础之封装

JavaSE基础之封装

一、Java中的封装

  1、字面意思:

    包装;

  2、专业含义:

    面向对象的三大特征之一;

    指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

二、封装的目的

  1、隐藏类的实现细节;

  2、让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问;

  3、可进行数据检查,从而有利于保证对象信息的完整性;

  4、便于修改,提高代码的可维护性;

三、如何实现良好的封装

  1、将对象的成员变量和实现细节隐藏起来,不允许外部直接访问;

  2、把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。

四、封装的实现

  1、Java提供3个访问控制符:

    private、protected和public;

  2、4个访问控制级别:(访问范围越来越大)

    private->default->protected->public;

  3、访问控制级别表

  同一个类 同一个包 不同包 不同包的非子类
public 可以 可以 可以 可以
default 可以 可以 可以  
protected 可以 可以    
private 可以      

 

五、代码实现

1、实现封装的实体类:Person.java 

 1 package cn.com.zfc.lesson04.object.encapsulation;
 2 
 3 /**
 4  * 
 5  * @title Person
 6  * @describe 实现封装:注意 age 的 setter()方法
 7  * @author 张富昌
 8  * @date 2017年4月9日下午4:24:38
 9  */
10 public class Person {
11 
12     // 属性私有化
13     private String name;
14     private String sex;
15     private int age;
16 
17     // 提供一个无参的构造器
18     public Person() {
19     }
20 
21     // 提供私有成员变量的访问方法
22     public String getName() {
23         return name;
24     }
25 
26     public void setName(String name) {
27         this.name = name;
28     }
29 
30     public String getSex() {
31         return sex;
32     }
33 
34     public void setSex(String sex) {
35         this.sex = sex;
36     }
37 
38     public int getAge() {
39         return age;
40     }
41 
42     // 在给年龄赋值的时候,得判断当前年龄是否合法
43     public void setAge(int age) throws RuntimeException {
44         if (age < 0) {
45             throw new RuntimeException("年龄不能小于 0 啊");
46         } else if (age > 200) {
47             throw new RuntimeException("你是老妖怪吗?都有200多岁了");
48         } else {
49             this.age = age;
50         }
51     }
52 
53     // 重写 toString()方法,便于测试
54     @Override
55     public String toString() {
56         return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
57     }
58 
59 }

2、测试封装:TestEncapsulation.java

 1 package cn.com.zfc.lesson04.object.encapsulation;
 2 
 3 /**
 4  * 
 5  * @title TestEncapsulation
 6  * @describe 测试封装
 7  * @author 张富昌
 8  * @date 2017年4月9日下午4:25:40
 9  */
10 public class TestEncapsulation {
11     public static void main(String[] args) {
12         // 创建 Person 对象
13         Person person = new Person();
14 
15         // 给 Person 对象的 name 属性赋值
16         person.setName("张富昌");
17 
18         // 获取 Person 的 name 属性值
19         String name = person.getName();
20         System.out.println("Person‘s name:" + name);
21 
22         // 给 Person 对象的 age 成员变量赋值,这是可以检验数据的合法性
23         person.setAge(300);
24     }
25 }
测试结果:
技术分享

 

JavaSE基础之封装