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 }测试结果:
时间: 2024-10-07 05:26:21