第15讲-Scala编程详解面向对象编程之Trait.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北风网项目实战培训 1、trait基础知识 1-1 将trait作为接口使用 1-2 在trait中定义具体方法 1-3 在trait中定义具体字段 1-4 在trait中定义抽象字段 2、trait高级知识 2-1 为实例对象混入trait 2-2 trait调用链 2-3 在trait中覆盖抽象方法 2-4 混合使用trait的具体方法和抽象方法 2-5 trait的构造机制 2-6 trait字段的初始化 2-7 让trait继承类 课程大纲 // Scala中的Triat是一种特殊的概念 // 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似 // 在triat中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出方法的具体实现即可 // 类可以使用extends关键字继承trait,注意,这里不是implement,而是extends,在scala中没有implement的概念,无论继承类还是trait,统一都是extends // 类继承trait后,必须实现其中的抽象方法,实现时不需要使用override关键字 // scala不支持对类进行多继承,但是支持多重继承trait,使用with关键字即可 trait HelloTrait { def sayHello(name: String) } trait MakeFriendsTrait { def makeFriends(p: Person) } class Person(val name: String) extends HelloTrait with MakeFriendsTrait with Cloneable with Serializable { def sayHello(name: String) = println(Hello, + name) def makeFriends(p: Person) = println(Hello, my name is + name + , your name is + ) } 将trait作为接口使用 // Scala中的Triat可以不是只定义抽象方法,还可以定义具体方法,此时trait更像是包含了通用工具方法的东西 // 有一个专有的名词来形容这种情况,就是说trait的功能混入了类 // 举例来说,trait中可以包含一些很多类都通用的功能方法,比如打印日志等等,spark中就使用了trait来定义了通用的日志打印方法 trait Logger { def log(message: String) = println(message) } class Person(val name: String) extends Logger { def makeFriends(p: Person) { println(Hi, Im + name + , Im glad to make friends with you, + ) log(makeFriends methdo is invoked with parameter Person[name= + + ]) } } 在Trait中定义具体方法 // Scala中的Triat可以定义具体field,此时继承trait的类就自动获得了trait中定义的field // 但是这种获取field的方式与继承class是不同的:如果是继承class获取的field,实际是定义在父类中的;而继承trait获取的field,就直接被添加到了类中 trait Person { val eyeNum: Int = 2 } class Student(val name: String) extends Person { def sayHello = println(Hi, Im + name + , I have + eyeNum + eyes.) } 在Trait中定义具体字段 // Scala中的Triat可以定义抽象field,而trait中的具体方法则可以基于抽象field来编写 // 但是继承trait的类,则必须覆盖抽象field,提供具体的值 trait SayHello { val msg: String def sayHello(name: String) = println(msg + , + name) } class Person(val name: String) extends SayHello {

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档