类与对象
面向对象作为java语言的核心,我们尝试通过与现实应用相结合一点点的去理解什么是面向对象,如何使用面向对象思想指导开发。
面向对象与面向过程
我们以生活中的吃饭为场景,以面向过程和面向对象的描述,理解什么是面向对象,什么是面向过程以及它们之间的区别。
第一种方式“吃饭”
规定好吃饭的流程,如下图
实现过程
[分析]
完成吃饭工程:是一个个****动作*的连续性,如果其中的一个动作失败那么吃饭工程能否成功难以保证。过程的核心是*动作****,过程安排动作的执行步骤。一旦过程给定改变其中的动作会是项目的完成难度增加。
第二种“吃饭”
实现过程
[分析]
在吃饭项目中的核心是顾客和饭,系统关心的是顾客能不能吃上饭,至于饭如何做出来的,如何运输等对于顾客来讲是不关心的。系统关注于对象和对象的交互,核心思想:对象。
类的设计
面向对象的核心是"对象",对象是什么?现在比较准确的回答是:
对象是一个有职责的东西。实际在程序运行中以对象为核心的开发成为了面向对象的主要任务。但是按照人类的工作方式:先设计后实现,在对象创建之前我们需要先设计再使用对象,我们把设计阶段的的抽象内容称之为类,类的具体产物称为对象。类就像一个车模型,对象是指根据这个模型造出的具体车。要使用对象先要学习类。
类设计的三大要素
如何设计类?在实践过程中类一般有三大要素构成:类名,属性和方法,例如下图车的模型(设计图)可以看作类。
- 类名:类的唯一性,比如车类和狗类不同(可以理解为我们熟悉的类型,即自定义了一种新的类型)。
- 属性:属性是用来存储对象的数据,表示对象的特征,比如车有颜色特征,具体颜色是什么是由产生为对象后更新的。
- 方法:方法表示对象的行为,即对象能干什么?比如车对象,能加速、跑起来等。
如何创建对象
我们提到类是对象的模板,是很多对象的抽象,设计类是在设计阶段。那么如何产生对象呢?对象是类的一个具体实例(instance), 一般创建方式使用new 关键字完成。
如图所示,java创建对象的一般方式:
类型 引用名称 = new 构造方法();
比如: Car myCar = new Car( );
有了对象我们就可以使用对象的方法: myCar.run( );
什么是引用
在创建对象中我们使用这样的语法:
Car myCar = new Car( );
myCar这个变量称之为引用变量。myCar实际上并不是对象,正真的对象是new Car( )产生出来的实例,但是这样操作对象有些麻烦,java的设计者使用了引用(reference)概念,用来和对象绑定,对引用myCar的操作就实际上是对Car对象的操作。
常用类设计中的方法
我们知道了类设计需要三个要素(类名、属性、方法), 除此以外哪些内容会是我们开发中常设计的呢?
- setXXX()方法 : 给每个属性设计一个set方法,使用者可以通过set方法修改属性的内容。
- getXXX()方法 : 通过get方法,获取属性的值。
- toString()方法 : 返回该对象的字符串表示。通常, toString方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
程序案例:
@Override
public String toString() {
return "Car [brand=" + brand + ", color=" + color + ", price=" + price + "]";
}
this关键字
this关键字表示对象自己的引用,一般在创建对象的时候会创建引用变量,如我们提到的myCar引用变量。在对象创建时对象内部还产生了一个自己的引用,命名为this。这个引用我们不能直接访问,但是我们可以在类设计中使用它把它当作对象自己。
例如: this.brand 表示对象的属性brand。
在set、get方法中使用this,可以增强代码的可读性。
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}