JavaSE-08 封装

学习要点

  • 封装
  • 访问控制符
  • 包 

 

封装

没有封装的代码有何缺陷?

例如:对狗狗的健康值赋值为-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方法中加入属性控制语句
posted @ 2018-01-09 20:38  rask  阅读(200)  评论(0编辑  收藏  举报