这一章能够说是 Java 的重中之重,没错众所周知,Java 是 面向对象 编程,这一章讲的就是 对象与 类。算法
一、概述:编程
A、面向对象程序设计,简称(OOP),Java 是彻底面向对象的,必须熟悉 OOP 才可以编写 Java 程序。数组
B、面向对象的程序是由对象组成的,每一个对象包含对用户公开的特定功能部分和隐藏的实现部分。数据结构
C、程序中的不少对象来自标准库,还有一些事自定义的。编程语言
D、只要对象可以知足要求,没必要关心其功能的具体实现过程。ide
E、在面向过程的程序中,算法是放在第一位,而数据结构是放在第二位;OOP 把这个次序调转,把数据放在第一位,算法/操做数据的算法放在后面。函数
二、类:spa
A、类(class)是构造对象的模板 或 蓝图。设计
B、由 类 构造(construct)对象的过程称为建立类的实例(instance)。指针
C、OOP 的原则,让用户自定Java 的类,变得更加容易,就是:能够经过扩展一个类来创建另外一个新的类。
D、在 Java 中,全部的类都源自一个 "神通广大的超类" Object。
E、在扩展一个已有的类时,这个扩展后的新类具备所扩展的类的所有属性和方法。
F、经过扩展一个类来创建另外一个类的过程叫 继承(inheritance)。
G、类之间的关系:
关系 | 描述 |
依赖("uses-a") | A、依赖(dependence),即 "uses-a" 关系,是一种最明显的、最多见的关系。 B、若是一个 类/A 的方法操做另外一个 类/B 的对象,咱们能够说这个 类/A 依赖 另外一个 类/B。 C、将相互依赖的类减至最少,能够减小一些由于修改类而致使的Bug 出现,这就是所谓的耦合度最小。 D、上面 C 的说法,就是减小相互依赖的类,其实就是低耦合的说法。 |
聚合("has-a") | A、聚合(aggregation),即 "has-a" 关系。 B、聚合意味着 类A 的对象,包含着一些 类B 的对象 C、在 Java 的核心技术中,做者建议咱们用聚合这个词,而不是用关联。 |
继承("is-a") | A、继承(inheritance),即 "is-a" 关系。 |
三、对象:
A、要使用 OOP, 必定要清楚对象的三个主要特性:
* 对象的行为(behavior)—— 能够对对象施加哪些操做,或者能够对对象施加哪些方法。
* 对象的状态(state)—— 当施加哪些方法时,对象如何响应
* 对象标识 (identity)—— 如何辨别具备相同行为与状态的不一样对象
B、对象的状态必须经过调用方法实现(若是不通过方法调用就能够改变状态,只能说明封装性遭到破坏)。
C、要想使用对象,就必须先构建对象,并指定初始状态;而后再对对象应用方法。
D、在 Java 中,是使用 构造器(constructor)构造新的实例;构造器是一种特殊的方法,用来构造并初始化对象。
E、想要构造一个对象,须要在构造器前面 加上 new 操做符
/// 例以下面的 Date 类,咱们要构造一个 Date 对象
/// Date 就是构造器。
/// 构造器的名称 要跟类名同样。
/// 构造器,老是伴随着 new 操做符的执行被调用,而不能对一个已经存在的对象调用构造器来达到从新设置实例域的目的。 Date dateObj = new Date(); /// JavaScript: class 类名 { /// constructor 是构造函数 / 也叫构造器,多是 Java 习惯叫 构造器 constructor() {}
}
F、对象和对象变量之间 存在一个重要的区别,对象变量,它是未引用对象,只声明了的变量。不能使用类的方法。
G、Java 中的对象变量,能够理解成 C++ 中的指针,大概意思就是,编程语言在 内存中 建立好一个对象,放在那里,而后变量名只是指向这一块内存的地址。
H、因此 为何上一章的 数组赋值 是浅拷贝。
I、在 Java 中,最简单的类定义形式为:
class ClassName { field 1 field 2 ... /// 其中 constroctor 是 Java 中,类的构造函数, /// 这里不是有多个构造函数,而是一个方法重载的概念,我在下一章会说。
/// Java 中的构造函数,是跟类名相同的,这点跟JavaScript 的不一样,JavaScript 的构造函数,是 constructor() 这个固定名称 constructor1 constructor2 ...
/**
* A、Java 中的实例域,即,类的字段(属性),局部的,全局的。在实例化后变成了 对象的 属性或者字段,这个时候就叫作实例域
* 对比了一下,应该在 constructor 中有 赋值的 类属性/字段,实例化后,带的属性,都叫实例域,由于在实例中能访问到。
* B、静态域,也叫 类域,应该就是上面 field 使用 static 定义后的属性。
* 意思准不许确很差说,我先这样认为先,后面更加清楚后,会修改,这里我的建议本身去查意思。
*/ method1 method2 ... }