一、目标
学完本次课程后,你能够:
- 理解封装的作用
- 会使用封装
- 会使用Java中的包组织类
- 掌握访问修饰符,理解访问权限
二、为什么要使用封装
不封装会在编程过程中存在代码缺陷,变量可以接受一些非法值,并输出。
三、什么是封装
1、封装的概念
- 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
两大基本原则:
- 把尽可能多的东西藏起来,对外提供便捷的接口
2、封装的实现
1、将属性改为private
2、创捷getter setter方法,用于属性的读写
3、在getter 和setter方法中加入属性控制语句,对属性值的合法性进行判断
3、封装的好处
- 便于使用者正确使用系统,防止错误修改属性
- 有助于系统之间的松耦合,提高系统独立性
- 提高软件的可重用性
- 降低了构建大型系统的风险
Eg1 使用封装实现企鹅类
需求说明
使用封装实现电子宠物系统的企鹅类正确输入健康值和亲密度
保证健康值的有效性(0-100),否则取默认值80
保证亲密度的有效性(0-100),否则取默认值90
public void setHealth(int health){
//对传递过来的health值进行判断
if(health<0||health>100){
System.out.println("你赋予的健康值不合理,默认赋值为80");
this.health=80;
return;
}
this.health=health;
}
public void setLove(int love){
//对传递过来的love值进行判断
if(love<0||love>100){
System.out.println("你赋予的亲密度值不合理,默认赋值为90");
this.love = 90;
return;
}
this.love=love;
}
四、包
1、为什么需要包
- 文档分门别类,易于查找和管理
- 使用目录解决文件同名冲突问题
2、包的作用
- 允许类组成较小的单元(类似 文件夹),易于找到和使用相 应的文件
- 防止命名冲突 区分名字相同的类
- 有助于实施访问权限控制
3、包的创建
作为Java源代码的第一条语句
用package声明包,以分号结尾
//
package com.bdqn.demo02;
4、包命名的规范
包名由小写字母组成,不能以圆点开头或结尾
包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名
包名后续部分依不同机构内部的规范不同而不同
5、如何导入包
为了使用不在同一包中的类,需要在Java程序中使用import关键字导入这个类
// import 包名. 类名;
- . 系统包:java.util 2.
- 自定义包:cn.jtest.classandobject
- *: 指包中的所有类
- School :指包中的School类
6、包的注意事项
一个类同时引用了两个来自不同包的同名类
- 必须通过完整类名来区分
每个包都是独立的,顶层包不会包含子包的类
- package和import的顺序是固定的 package必须位于第一行(忽略注释行)
- 只允许有一个package语句
- 其次是import,可以有多条语句
- 接着是类的声明
五、类的访问修饰
1、类的访问修饰符
public修饰符:公有访问级别
默认修饰符:包级私有访问级别
2、类成员的访问修饰符
- public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
- private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
- protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
- default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。
3、Static修饰符
- 成员变量 静态变量,可以直接通过类名访问
- 成员方法 静态方法,可以直接通过类名访问
- 代码块 静态代码块,当Java虚拟机加载类时,就会执行该代码块
(1)类的成员变量
类变量(静态变量)
- 被static修饰的变量 在内存中只有一个拷贝
- 类内部,可在任何方法内直接访问静态变量
- 其他类中,可以直接通过类名访问
实例变量
- 没有被static修饰的变量
- 每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响
(2)static方法
静态方法:可直接通过类名访问
- 静态方法中不能使用this和super
- 不能直接访问所属类的实例变量和实例方法
- 可直接访问类的静态变量和静态方法
实例方法:通过实例访问
- 可直接访问所属类的静态变量、静态方法、实例变量和实例方法
- 静态方法必须被实现 main()就是最常用的静态方法
(3)为什么静态的访问不到非静态的底层逻辑
- 静态方法中 只能访问静态方法 静态变量
- 非静态是对象创建之后才会产生
- 而静态方法随着类的存在就会存在
- 这也是为什么静态方法必须被实现的原因
六、总结
- 实现封装的步骤是什么?
- 常用的访问权限控制符有哪些?