Table of Contents generated with DocToc (opens new window)
# 面向对象程序设计概述
面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。
# 类
class是构造对象的模版或者蓝图。
由class构造对象的过程称为创建类的实例。
用Java编写的所有代码都位于某个类的内部。
封装又称‘数据隐藏’,是与对象有关的一个重要概念。从形式上看,封装只是把一些数据和action放到一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实力域(instance field),操纵数据的过程称为方法。
# 对象
要想使用OOP,一定要清楚对象的三个主要特性:
- 对象的行为——可以对对象施加哪些操作,或者可以对对象施加哪些方法?
- 对象的状态——当施加那些方法时,对象如何响应?
- 对象标识——如何辨别具有相同行为与状态的不同对象?
# 识别类
- 首先从设计类开始,然后再往每个类添加方法。
- 识别类的简单规则是在分析问题的过程中寻找名词,而方法对应着动词。
- 所谓的“找名词或动词”原则上只是一种经验。
# 类之间的关系
常见的关系:
- 依赖——users-a
- 聚合——has_a
- 继承——is-a
我们应该尽可能的将相互依赖的类减至最少,也就是让类之间的耦合度最小。
所谓聚合,也就是关联,意味着类A的对象包含类B的对象。
# 设计预定义类
# 对象与对象变量
- 要想使用对象,就必须首先构造对象,并指定其初始状态,然后,对对象应用方法。
- 在Java中,使用构造器构造新实例。构造器是一种特殊的方法,用来构造并初始化对象。
- 一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。
- 在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new操作符的返回值也是一个引用。
# Java类库中Gregorian-Calendar类
Date类——表示时间点
GregorianCalendar类——日历表示法,描述了日历的一般属性
将时间与日历分开是一种很好的面向对象设计。通常,最好使用不同的类表示不同的概念。
# 更改器方法与访问器方法
对实例域作出修改的方法称为更改器方法,仅访问实例域而不进行修改的方法称为访问器方法。
比如,访问器方法——getTime方法和更改器方法——setTime方法。
# 用户自定义类
# 从构造器开始
- 构造器与类同名
- 每个类可以有一个以上的构造器
- 构造器可以有0个,1个或多个参数
- 构造器没有返回值
- 构造器总是伴随着new操作一起调用
# 隐式参数与显式参数
隐式参数——出现在方法名前的类对象
显示参数——位于方法名后面括号中的数值
关键词this表示隐式参数,使用隐式参数,可以比较好的将实例域与局部变量明显的区分开来。
# final实例域
final修饰符基本都应用在基本类型域,或不可变类的域。
# 静态域与静态方法
# 静态域
将域定义于static,就叫做静态域
100个实例,或者说是对象,都有自己的实力域,也就是属性。但是只有一个静态域,即使没有一个实例,静态域也存在。它属于类,而不属于任何独立的对象。
# 静态方法
静态方法是一种不能对对象实施操作的方法。
可以认为静态方法是没有this参数的方法。
一下两张情况下使用静态方法:
- 一个方法不需要访问对象状态,其所需参数都是通过显式参数提供
- 一个方法只需要访问类的静态域
# 方法参数
Java对对象采用的不是引用调用,而是值传递
方法参数的使用情况:
- 一个方法不能修改一个基本数据类型的参数
- 一个方法可以改变一个对象参数的状态
- 一个方法不能让对象参数引用一个新的对象