本节书摘来异步社区《Android游戏开发详解》一书中的第3章,第3.5节,作者: 【美】Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

3.5 继承

Android游戏开发详解
在设计对象的分类的时候,你可能会发现另一种叫作继承(inheritance)的模式,它给了我们更多的控制权。继承描述了这样一种现象,一个类继承了另一个类中的变量和方法。在这种情况下,继承者称为子类(subclass,或孩子类),而祖先称作超类(superclass,或者父类)。

使用继承比使用接口的优点在于,可以具备复用代码的能力。还记得吧,实现了一个接口的每一个类,都必须针对接口中声明的每一个抽象方法提供一个完整的实现。使用前面小节的例子,这意味着,King、Villain、Professor和SushiChef,都必须拥有它们自己的eat()、walk()和urinate()方法。在这种情况下,继承很强大,因为它允许相似的类共享方法和变量。我们将使用一个假想的角色扮演游戏的例子来说明这一点。

在创建一款角色扮演游戏的时候,你可能有一个名为Hero的类来表示玩家角色,如程序清单3.10所示。

程序清单3.10 Hero类

01 public class Hero {
02    protected int health = 10; // We will discuss ‘protected’ later in this section
03    protected int power = 5;
04    protected int armor = 3;
05
06    public void drinkPotion(Potion p) {
07     health += p.volume(); // Equivalent to health = health + p.volume();
08    }
09    
10    public void takeDamage(int damage) {
11    int realDamage = damage - armor;
12    if (realDamage > 0) {
13      health -= realDamage; // Equivalent to health = health – realDamage.
14    }
15    }
16    
17    // ... more methods
18
19 }

在创建了Hero之后,你随后决定要让自己的RPG和竞争者有所区分,那就实现一个独特的类系统,其中玩家能够在此前没有见过的Warrior、Mage和Rogue类之间做出选择。

接下来,和任何值得尊敬的面向对象程序员会做的一样,你为每一种角色类型创建了一个单独的Java类,因为Warrior、Mage和Rogue中的每一个都应该具有无法想象的强大而独特的能力。你还决定,既然所有的角色类都是泛型的Hero类的第一个和最重要的扩展,它们每一个都应该拥有程序清单3.10中的Hero类的所有变量和方法。这就是继承的用武之地。

来看一下程序清单3.11到程序清单3.13。

程序清单3.11 Warrior类

public class Warrior extends Hero {//    ... other variables and methodspublic void shieldBash() {...}
}

程序清单3.12 Mage类

public class Mage extends Hero {//  ... other variables and methodspublic void useMagic() {...}
}

程序清单3.13 Rogue类

public class Rogue extends Hero {//    ... other variables and methodspublic void pickPocket() {...}
}
注意
,```
我们使用关键字extends表示继承。这是合适的,因为所有这3个类都是超类Hero的扩展。在继承中,每个子类都针对超类中的所有非私有的变量和方法,接受它们自己的版本(程序清单3.10中的protected变量,类似于private变量,因为外部类是无法访问它们的;然而,和private变量不同,在继承中,子类是可以访问它们的)。在应用多态的时候,继承的好处最明显,多态允许我们在如下所示的一个方法中使用Hero的任何子类。

// Will attack any Hero regardless of Class
public void attackHero(Hero h, int monsterDamage) {
      h.takeDamage(monsterDamage);
}

《Android游戏开发详解》一3.5 继承相关推荐

  1. 《Android游戏开发详解》——第1章,第1.6节函数(在Java中称为“方法”更好)...

    本节书摘来自异步社区<Android游戏开发详解>一书中的第1章,第1.6节函数(在Java中称为"方法"更好),作者 [美]Jonathan S. Harbour,更 ...

  2. 《Android游戏开发详解》一2.16 区分类和对象

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.16节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社 ...

  3. 《Android游戏开发详解》一3.1 构造方法

    本节书摘来异步社区<Android游戏开发详解>一书中的第3章,第3.1节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区 ...

  4. 《Android游戏开发详解》一导读

    前 言 Android游戏开发详解 作为对编程知之甚少或者毫无所知的初学者,开始学习Android游戏开发,可能会觉得就像是穿越陌生的星际的旅程.有太多的事情要尝试,太多的知识要学习,令人遗憾的是,还 ...

  5. 《Android游戏开发详解》——第3章,第3.1节构造方法

    本节书摘来自异步社区<Android游戏开发详解>一书中的第3章,第3.1节构造方法,作者 [美]Jonathan S. Harbour,更多章节内容可以访问云栖社区"异步社区& ...

  6. 《Android游戏开发详解》一2.18 使用Java API中的对象

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.18节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.1 ...

  7. 《Android游戏开发详解》——第2章,第2.10节使用对象

    本节书摘来自异步社区<Android游戏开发详解>一书中的第2章,第2.10节使用对象,作者 [美]Jonathan S. Harbour,更多章节内容可以访问云栖社区"异步社区 ...

  8. 《Android游戏开发详解》一2.2 设置开发机器

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.2节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区 ...

  9. 《Android游戏开发详解》一2.9 类

    本节书摘来异步社区<Android游戏开发详解>一书中的第2章,第2.9节,作者: [美]Jonathan S. Harbour 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区 ...

  10. 《Android游戏开发详解》一1.1 什么是编程

    本节书摘来异步社区<Android游戏开发详解>一书中的第1章,第1.1节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.1 ...

最新文章

  1. wagtail python cms 测试部署
  2. 支持 Drupal 的 虚拟空间
  3. 转录组差异表达分析工具Ballgown
  4. ASP.NET状缓存Cache的应用-提高数据库读取速度
  5. 计算机初赛基础知识,备战初赛计算机基础知识
  6. 【英语学习】【English L06】U08 News L1 It's really a magical book!
  7. Docker安装MongoDB管理工具nosqlclient
  8. 阿里2015回顾面试招收学历(获得成功offer)
  9. 计算机毕业设计django基于python金太阳家居电商平台(源码+系统+mysql数据库+Lw文档)
  10. ccc加拿大计算机竞赛在线评测系统,加拿大CCC计算机竞赛
  11. 用c语言解三角函数公式大全初中,初中三角函数公式大全
  12. 马云:心要善,刀要快 | 内部干货
  13. C++实现单例模式 —— 打印机
  14. view-design 组件库表格筛选条件联动保留前面筛选条件的高亮状态
  15. Caffe源码解析(一) —— caffe.proto
  16. 读书笔记:南怀瑾《历史的经验》
  17. 钢筋直螺纹套筒A钢筋直螺纹套筒A钢筋直螺纹连接丝扣加工要求
  18. mysql-日志分析
  19. openwrt/linux路由器访客网络禁止访问WebUI但可以访问外网功能实现
  20. 2.3 数值分析: 矩阵三角分解法

热门文章

  1. 网络助手之NABCD
  2. SVN源码服务器搭建-详细教程(我的收藏)
  3. 使用Xcode Instruments Leak解决内存泄漏问题
  4. CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法
  5. Agenda for Mac(多功能日历管理工具)中文版
  6. mac新手入门:在Mac上怎么使用夜览
  7. 如何设置共享Mac上的视频、音乐或照片的教程
  8. vue中修改了数据但视图无法更新的情况
  9. mongodb分片技术
  10. python核心编程笔记chapter 14