52.scala编程思想笔记——多态

52.scala编程思想笔记——多态

         欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50447604
源码下载连接请见第一篇笔记。

多态表示许多形态。

         表示在不同类型上执行相同的操作。

         基类和特征除了用于组装类之外,还有很多其他用途。

         例如,如果使用类A、特征B和特征C来创建新类,就可以选择将这个新类只当做A、B或C来处理。

         例如,如果想创建一个游戏,每个游戏元素基于在游戏世界中的位置将自身绘制在屏幕上,并且当两个元素靠近时候,会进行交互。代码如下:

import com.atomicscala.AtomicTest._

import com.atomicscala.Name

 

class Element extends Name {

  definteract(other:Element) =

   s"$this interact $other"

}

 

class Inert extends Element

class Wall extends Inert

 

trait Material {

  defresilience:String

}

trait Wood extends Material {

  defresilience = "Breakable"

}

trait Rock extends Material {

  defresilience = "Hard"

}

class RockWall extends Wall with Rock

class WoodWall extends Wall with Wood

 

trait Skill

trait Fighting extends Skill {

  def fight ="Fight!"

}

trait Digging extends Skill {

  def dig ="Dig!"

}

trait Magic extends Skill {

  def castSpell= "Spell!"

}

trait Flight extends Skill {

  def fly ="Fly!"

}

 

class Character(var player:String="None")

  extendsElement

class Fairy extends Character with Magic

class Viking extends Character

  with Fighting

class Dwarf extends Character with Digging

  with Fighting

class Wizard extends Character with Magic

class Dragon extends Character with Magic

  with Flight

 

val d = new Dragon

d.player = "Puff"

d.interact(new Wall) is

"Dragon interact Wall"

 

def battle(fighter:Fighting) =

 s"$fighter, ${fighter.fight}"

battle(new Viking) is "Viking, Fight!"

battle(new Dwarf) is "Dwarf, Fight!"

battle(new Fairy with Fighting) is

"anon, Fight!"

 

def fly(flyer:Element with Flight,

 opponent:Element) =

   s"$flyer, ${flyer.fly}, " +

   s"${opponent.interact(flyer)}"

 

fly(d, new Fairy) is

"Dragon, Fly!, Fairy interact Dragon"

到目前为止,已经实现了如何创建基类,以及在继承过程中添加新的方法,或者使用特征来混合新的功能。

         不要假设一开始就可以做出正确的设计。

         要不断的重构代码,直至设计方案看起来正确为止。不要满足于“代码可以工作即可”这种低标准。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值