Scala面向对象编程之Trait高级编程技术实践-JVM生态编程语言实战

栏目: Java · 发布时间: 6年前

内容简介:《JVM生态编程语言实战》来源于被一位容器云专家问道如何实现一个线程池时,让我顿感以前研究的Java并发控制相关的理论以及多线程并发设计模式忘得九霄云外,鉴于此,气愤难平,决定提升编程技术。版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,如有任何技术交流,可随时联系。

《JVM生态编程语言实战》来源于被一位容器云专家问道如何实现一个线程池时,让我顿感以前研究的 Java 并发控制相关的理论以及多线程并发 设计模式 忘得九霄云外,鉴于此,气愤难平,决定提升编程技术。

版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,如有任何技术交流,可随时联系。

1 知识概要

1.1 trait基础知识

  • 1-1 将trait作为接口使用
  • 1-2 在trait中定义具体方法
  • 1-3 在trait中定义具体字段
  • 1-4 在trait中定义抽象字段

1.2 trait高级知识

  • 2-1 为实例对象混入trait
  • 2-2 trait调用链
  • 2-3 在trait中覆盖抽象方法
  • 2-4 混合使用trait的具体方法和抽象方法
  • 2-5 trait的构造机制
  • 2-6 trait字段的初始化
  • 2-7 让trait继承类

2 详细使用

2.1 将trait作为接口使用

  • Scala中的Triat是一种特殊的概念

  • 可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似

  • 在triat中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出方法的具体实现即可

  • 类可以使用extends关键字继承,trait在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 " + p.name)
      }
    复制代码

2.2 在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, I'm " + name + ", I'm glad to make friends with you, " + p.name)
          log("makeFriends methdo is invoked with parameter Person[name=" + p.name + "]")
        }
      }
    复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Speed Up Your Site

Speed Up Your Site

Andrew B. King / New Riders Press / 2003-01-14 / USD 39.99

There's a time bomb on the web: user patience. It starts ticking each time someone opens one of your pages. You only have a few seconds to get compelling content onto the screen. Fail, and you can kis......一起来看看 《Speed Up Your Site》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具