如何理解面向对象(一)

面向过程和面向对象的区别

为了更好的理解什么是面向对象,面向对象和面向过程有什么区别,我举一个生活中的小例子来对比一下两者的区别:开车去超市。

面向过程:
面向过程的话可以理解为我们现在要开一辆平平无奇的车去超市。我们得挂档 > 松手刹 > 点火 > 一顿猛如虎的操作之后到达目的地。

面向对象:
面向对象的话就可以理解为我们的车是无人驾驶汽车,我们告诉车我们要去超市,然后车自己一顿操作把我们带去了超市。

从上面的小例子中我们可以看出,在面向对象的情况下我们甚至不需要知道超市在哪也不需要知道怎么开车,我们只需要告诉车我们要去超市即可。此时,我们可以将这辆可以将这个无人驾驶汽车理解成一个对象;而在面向过程的情况下我们不仅需要知道怎么开车,还需要知道去超市的路怎么走,然后我们还要自己开车!

面向过程的时候,我们主要的操作都是在开车,我们要在路上控制车速,注意红灯和路上的标志。而面向对象的时候,我们唯一的操作就是在告诉车,去超市。这就是区别:面向对象的时候主要突出的就是我们对那个对象的操作,面向过程的时候突出的则是我们在达到目的的过程中的一些列操作。

怎么面向对象

如何实现面向对象?那我们需要先了解一下。类的话,我们暂时先将其理解设计图。就如我们之前提到的无人驾驶汽车,类就是这个无人驾驶汽车的设计图,而带我们去超市的那台无人驾驶汽车就是对象。有了设计图我们就可以创造出事先设计好的对象。

枯燥的说是没有用的,所以不如我们用代码简单模拟一下当下热门的《王者荣耀》的实现,首先,我们定义一个类来设计一个小兵。王者荣耀中最重要的存在,嗯,谁不服?

class Soldier{
	public int hp;
	public int attack;

	public void beBeaten(int attack) {
		hp = hp - attack;
	}
}

好的,通过上面的代码我们设计好了一个小兵,这里将小兵设计成了一个有 HP 值和攻击力和一个 beBeaten (挨打)方法的小兵,然后现在我们创建一个小兵,然后设置一下小兵的血量和攻击力。

// 创建一个小兵对象
Soldier soldier = new Soldier();
soldier.hp = 500;
soldier.attack = 40;

OK,我们现在创建了一个小兵,它拥有500的血量和40的攻击力。嗯,是不是有点上道了?接下来我们试试攻击一下它:

// 好的,现在假设我们是一个攻击力200的亚瑟,我们去A一下这个小兵
soldier.beBeaten(200);

现在如果查看这个小兵的HP的话他就只剩下300的HP了。这就是简单的一个面向对象的小案例。

那么问题来了,《王者荣耀》里不止一种小兵,它有近战的,远程的,炮车和超级兵。难道每个类型的小兵我们都要重新设计一次?当然不用,下面我们就来了解一下面向对象的特性之一:继承。

面向对象 - 继承

什么是继承?先来个继承的定义,继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

这真是十分之枯燥乏味,所以我觉得我们还是一边继续完善我们的小模拟,一边来理解什么是继承比较好。现在我们结合一下先前设计好的小兵,我们会继续沿用上面的代码

Class MasterSoldier extends Soldier {
}

上面,我们创建了一个用来设计法师小兵的类,它继承了我们之前设计的小兵的那一个类,我们可以看到,它并没有什么字段(成员变量)或者是什么方法,但是实际上,它拥有了Soldier类所有的字段和方法。

MasterSoldier masterSoldier = new MasterSoldier();
masterSoldier.hp = 400;
masterSoldier.attack = 60;
masterSoldier.beBeaten(200);

嗯,十分生动形象的理解了继承嘛,现在我们在回头去看那一句继承的定义是不是就理解了它的意思?

你可能感兴趣的:(Java)