学习要点
- 封装
- 访问控制符
- 包
封装
没有封装的代码有何缺陷?
例如:对狗狗的健康值赋值为-100。如何避免?——使用封装。
封装的概念
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的好处
封装的步骤
上机练习:封装电子宠物系统的Dog类和Penguin类
需求描述:宠物的健康值必须在0-100之间,超过范围,则默认设置为60。
类的访问控制
访问控制符
|
private |
default |
protected |
public |
同一个类中 |
√ |
√ |
√ |
√ |
同一个包中 |
|
√ |
√ |
√ |
子类中 |
|
|
√ |
√ |
全局范围内 |
|
|
|
√ |
注意:如果一个java源文件里定义的所有类都没有使用public修饰,则这个java源文件的文件名可以是一切合法的文件名;但是一个java源文件中定义了一个public修饰的类,则这个源文件的文件名必须与public修饰的类的类名相同。
封装原则
- 如果一个Java类的每个实例变量都使用private修饰,并且为每个实例变量提供setter和getter方法,那么这个类就符合JavaBean规范的类。
- 实例变量尽量采用private修饰。类变量(static修饰),类似全局变量的成员变量,可以考试使用public修饰。
- 如果某个类主要作为父类使用,该类里的方法仅希望被子类重写,而不想被外部直接调用,则考虑使用protected修饰。
- 有些方法只是作为类的辅助实现方法,也称为工具方法,这些方法是用private修饰。
包
java包机制
提供了类的多层命名空间,用于解决类的命名冲突、类文件管理问题。一般把一组功能相同的类放在同一个包下。
包的命名规则
包名的所有字母要小写。
命名规则:倒写的域名.项目名称.模块名称.组件名称
导入包中的类
使用一个包中的类,有两种方式:
第一种:使用类全名
第二种:在包名之后和类名之前使用import相应类
导入指定包中某个类的静态成员变量或者成员方法
import static的用法:
导入静态成员,简化代码书写工作。
上机练习:电子宠物系统包的设计
Java常用的包
常用包
Java的核心类都在java包及其子包下,Java扩展的许多类都放在javax包及其子包下。这些核心类和扩展的类也就是通常所说的API(应用程序接口),通过查询API文档可以获得详细的使用帮助指导。
- java.lang:该包提供了Java语言进行程序设计的基础类,它是默认导入的包。该包里面的Runnable接口和Object、Math、String、StringBuffer、System、Thread以及Throwable类需要重点掌握。
- java.util:该包提供了包含集合框架、集合工具类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。
- java.io:该包为文件系统、数据流和序列化提供输入与输出相关接口和类。
- java.NET:该包提供了网络编程相关的类和接口。
- java.sql:该包提供了使用Java语言进行JDBC数据库编程相关类和接口。
- java.awt和javax.swing:这两个包提供了GUI设计与开发的类和接口。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。
- java.text:该包提供了java文本格式化相关类。
API文档的使用
类和封装的总结
使用面向对象的思想开发程序的好处
- 客户和软件设计开发人员之间、软件设计开发人员内部交流更加顺畅
- 提高软件设计和开发效率
从现实世界抽象出类
- 找出名词确定类、属性
- 找出动词确定方法
- 剔除与业务无关的属性和方法
方法重载的规则
- 方法名相同
- 参数项不同
- 与访问修饰符和返回值无关
static可以修饰属性、方法、静态块
static、非private修饰 |
非static、private修饰 |
|
属性 |
类属性、类变量 |
实例属性、实例变量 |
方法 |
类方法 |
实例方法 |
调用方式 |
类名.属性 类名.方法() 对象.属性 对象.方法() |
对象.属性 对象.方法() |
归属 |
类 |
单个对象 |
实现封装的步骤
- 修改属性的可见性
- 创建公有的getter/setter方法
- 在getter/setter方法中加入属性控制语句