## **封装的基本概念:**
封装将类的某些信息隐藏在类内部,不允许外部程序直接访问,只能通过该类提供的方法来实现对隐藏信息的操作和访问。例如:一台计算机内部极其复杂,有主板、CPU、硬盘和内存, 而一般用户不需要了解它的内部细节,不需要知道主板的型号、CPU 主频、硬盘和内存的大小,于是计算机制造商将用机箱把计算机封装起来,对外提供了一些接口,如鼠标、键盘和显示器等,这样当用户使用计算机就非常方便。
## **封装的特点:**
* 只能通过规定的方法访问数据。
* 隐藏类的实例细节,方便修改和实现。
## **实现封装的具体步骤如下:**
1. 修改属性的可见性来限制对属性的访问,一般设为 private。
2. 为每个属性创建一对赋值(setter)方法和取值(getter)方法,一般设为 public,用于属性的读写。
3. 在赋值和取值方法中,加入属性控制语句(对属性值的合法性进行判断)。
<br>
<br>
## **封装实例一:**
在同一个文件下创建day02_encapsulation.java文件和day03_encapsulation2.java文件,在day02_encapsulation.java文件下,所封装的代码如下;
```
public class day02_encapsulation{
public int age;
public void Setparamete(int age){ // 这是一个方法
this.age = age;
System.out.println("我是封装的方法,我被调用了,呜呜呜");
}
}
```
day03_encapsulation2.java文件下代码如下;
```
public class day03_encapsulation2{
public static void main(String [] args){
day02_encapsulation setparamete = new day02_encapsulation();
setparamete.Setparamete(20);
}
}
```
我们在day03_encapsulation2.java文件里面调用了day_encapsulation里面的Setparamete方法
<br>
## **封装实例二:**
下面以一个学员类的封装为例介绍封装过程。一个学员的主要属性有姓名、年龄、联系电话和家庭住址。假设学员类为 student,示例如下:
```
public class day04_demo{
// 姓名、年龄、联系电话和家庭住址
private String name;
private int age;
private String phone;
private String address;
public String GetName(){
return name;
}
public void setName(String name){ // void 无返回结果 null 构造方法
this.name = name;
}
public int GetAge(){
return age;
}
public void setAge(int age){
if (age < 18 || age > 40 ){
System.out.println("年龄必须在18到40之间");
this.age = 20;
}else{
this.age = age;
}
}
public String Getphone(){
return phone;
}
public void setphone(String phone){
this.phone = phone;
}
public String GetAddress(){
return address;
}
public void setaddress(String address){
this.address = address;
}
}
```
如上述代码所示,使用 private 关键字修饰属性,这就意味着除了 student 类本身外,其他任何类都不可以访问这些属性。但是,可以通过这些属性的 setXxx() 方法来对其进行赋值,通过 getXxx() 方法来访问这些属性。
<br>
在 age 属性的 setAge() 方法中,首先对用户传递过来的参数 age 进行判断,如果 age 的值不在 18 到 40 之间,则将 Employee 类的 age 属性值设置为 20,否则为传递过来的参数值。
<br>
编写测试类 student,在该类的 main() 方法中调用 student 属性的 setXxx() 方法对其相应的属性进行赋值,并调用 getXxx() 方法访问属性,代码如下:
```
public static void main(String[]args){
// 调用 student 属性的 setXxx() 方法对其相应的属性进行赋值,并调用 getXxx() 方法访问属性
day04_demo demo = new day04_demo();
demo.setName("王宝钏");
demo.setAge(18);
demo.setphone("18080808080");
demo.setaddress("上海市上海徐汇区");
System.out.println("昵称:" + demo.GetName());
System.out.println("年龄:" + demo.GetAge());
System.out.println("电话:" + demo.Getphone());
System.out.println("家庭住址:" + demo.GetAddress());
}
```
通过封装,实现了对属性的数据访问限制,满足了年龄的条件。在属性的赋值方法中可以对属性进行限制操作,从而给类中的属性赋予合理的值, 并通过取值方法获取类中属性的值(也可以直接调用类中的属性名称来获取属性值)。
- Java自动化测试
- 第一章:Java:基础内容
- 1.1:Java:Hello Word
- 1.2:Java:热身
- 1.3:Java:注释
- 1.4:Java:标识符
- 1.5:Java:常量
- 1.6:Java:基本数据类型
- 1.7:Java:引用类型
- 1.8:Java:String类
- 第二章:Java:运算符
- 2.1:Java:算数运算符
- 2.2:Java:关系运算符
- 2.3:Java:逻辑运算
- 2.4:Java:赋值运算符
- 2.5;Java:三元运算符
- 2.6:Java:位运算符
- 第三章:Java:循环控制语句
- 3.1:Java:for循环
- 3.2:Java:while循环
- 3.3:Java:switch
- 3.4:Java:if else
- 3.5:Java:练习题
- 第四章:Java:函数与全局/局部变量
- 4.1:Java:局部变量
- 4.2:Java:全局变量
- 第五章:Java:方法
- 5.1:Java:初识方法
- 5.2:Java:方法调用
- 5.3:Java:方法重载
- 5.4:Java:构造方法
- 5.5:Java:方法的注意事项
- 第六章:Java:面向对象
- 6.1:Java:小案例
- 6.2:Java:this 关键字
- 6.3:Java:super 关键字
- 6.4:Java:static 关键字
- 6.5:Java:final关键字
- 6.6:Java:instanceof 运算符
- 6.7:Java:面向对象之封装
- 6.8:Java:面向对象之继承
- 6.9:Java:面向对象之多态
- 第七章:Java:面向对象高级进阶
- 7.1:Java:抽象类
- 7.2:Java:Java中String类
- 7.3:Java:interface接口
- 7.4:Java:ArrayList
- 7.5:Java:HashSet
- 7.6:Java:HashMap
- 7.7:Java:反射(reflection)
- 第八章:Java:日志以及异常捕获
- 8.1:Java:log4j
- 8.2:Java:异常初识基础
- 8.3:Java:未被捕获的异常
- 8.4:Java:try和catch的使用
- 8.5:Java:多重catch语句的使用
- 8.6:Java:throws/throw 关键字
- 8.7:Java:finally关键字
- 8.8:Java:自定义异常
- 第九章:Java:xml and IO
- 9.1:Java:IO基本概念
- 9.2:java:properties
- 9.3:Java:xml基本介绍
- 9.4:Java:xml操作实例
- 第十章:Java:JDBC编程
- 10.1:Java:JDBC介绍
- 10.2:Java:JDBC查询
- 10.3:Java:JDBC插入
- 10.4:Java:Batch
- 10.5:Java:JDBC连接池
- 第十一章:Java:TestNG
- 11.1:java:TestNG简介
- 11.2:Java:TestNG小实例
- 11.3:Java:TestNG.xml文件配置
- 11.4:Java:TestNG基本注解
- 11.5:Java:TestNG注解代码
- 11.6:Java:TestNG预期异常
- 11.7:Java:TestNG忽略测试
- 11.8:Java:TestNG超时测试
- 11.9:Java:TestNG分组测试