假如我要写一个下棋的程序,
以面向对象的思想来写。那么
类 | 属性 | 方法 |
---|---|---|
棋子类 | 颜色(判定先后手) | 移动 |
棋盘类 | 样式(九宫格棋盘还是象棋棋盘等) | 找某一棋子位置 |
规则类 | 判断输赢 |
想要写一个具体的游戏,那么就需要细化属性和方法
如果是一个五子棋游戏,我们可以继承棋子类,添加id属性(因为不论黑方还是白方,棋子都是相同的,想要判断棋子的位置就需要通过一个能区分不同棋子的属性来寻找。可以继承规则类,添加 “判断是否有两个颜色相同的棋子相邻” 方法,
如果是一个象棋游戏,可以继承棋子类后添加名字(象棋棋子不全相同,每个都有名字兵马炮等),数量(象棋两个象两个车一个帅)这两个属性。还可以继承规则类,添加 “马的斜前方是否有阻挡物” 方法等用于判断棋子是否能移动。
这样在不改变原来类的基础上添加新的属性或方法就叫做继承。
象棋游戏里,我们继承棋子类后需要重写其 “移动” 方法。象棋游戏的棋子对象可以有马棋子对象,兵棋子对象等。马对象的移动重写后表现为 “沿两个格子的对角线移动”,而兵对象的移动方法重写后则表现为 “只能向前移动一格” 。
这样当一个类被继承后,子类对象引用同一方法表现出的不同行为就叫做多态
下棋的例子不太适合讲封装,所以就不写了-_-。