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

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

内容简介:《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 + "]")
        }
      }
    复制代码

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

查看所有标签

猜你喜欢:

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

Head First Design Patterns

Head First Design Patterns

Elisabeth Freeman、Eric Freeman、Bert Bates、Kathy Sierra、Elisabeth Robson / O'Reilly Media / 2004-11-1 / USD 49.99

You're not alone. At any given moment, somewhere in the world someone struggles with the same software design problems you have. You know you don't want to reinvent the wheel (or worse, a flat tire),......一起来看看 《Head First Design Patterns》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具