前言
本系列博文是《Java核心技术 卷一》的读书笔记,内容仅供参考。
面向对象程序概述
OOP 面向对象的程序是由对象组成的,每个对象包含对用户【公开的特定功能部分】和【隐藏的实现部分】。很多对象来自标准库。OOP中先组织数据,再确定如何操作数据的算法。
类
类(class)是构造对象的蓝图或模版。Java编写的所有代码都位于某个类的内部。
封装 Encapsulation 数据隐藏
封装将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方法。对象中的数据称为实例域instance field,操纵数据的过程称为方法method。对于每个特定类实例(对象)都有一组特定的实例域值。这些值的集合就是这个对象的当前状态。无论何时,只要向对象发送一条消息,它的状态就有可能发生改变。
实现封装的关键在于【绝对不能】让类中的方法直接的访问其他类的实例域。程序仅通过对象的方法与对象进行数据交互。封装给对象赋予了“黑盒”特征。
OOP可以通过扩展一个类来建立另外一个新的类。在Java中所有类都源于超类Object。扩展一个已有的类时,这个扩展后的新类具有所扩展的类的全部属性和方法。在新类中,只需提供适用于这个新类的新方法和数据域就可以了。通过扩展一个类来建立另一个类的过程称为继承 inheritance。
对象
三个主要特性:
对象的行为:可以对对象施加哪些操作,或可以对对象实施哪些方法?对象的行为可以调用方法定义。
对象的状态:当施加哪些方法时,对象如何响应?每个对象都保存着描述当前特征的信息。对象状态的改变必须通过调用方法实现 ( 如果不经过方法调用就可以改变对象状态, 只能说明封装性遭到了破坏 。)
对象标识:如何辨别具有相同行为与状态的不同对象?作为一个类的实例, 每个对象的标识永远是不同的, 状态常常也存在着差异。
识别类
编写程序可以从设计类开始, 然后再往每个类中添加方法。识别类的简单规则是在【分析问题的过程中寻找名词】, 而方法对应着动词。
类之间的关系
使用预定义类
对象与对象变量
想使用对象, 就必须首先构造对象, 并指定其初始状态。然后, 对对象应用方法。
使用构造器(constructor) 构造新实例。 构造器是一种特殊的方法, 用来构造并初始化对象。
1 | new Date(); |
通常, 希望构造的对象可以多次使用, 因 此, 需要将对象存放在一个变量中:
1 | Date birthday = new Date(); |
对象与对象变量之间的区别:
对象变量不是对象,一个对象变量并没有实际包含一个对象, 而仅仅引用一个对象。在 Java 中, 任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new 操作 符的返回值也是一个引用。
1 | Date deadline = new Date(); |
所有的 Java 对象都存储在堆中。 当一个对象包含另一个对象变量时, 这个变量依然 包含着指向另一个堆对象的指针。
最好使用不同的类表示不同的概念。
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !