Scala trait

trait logger{
  def log(msg : String)
}

//继承的第一个trait用extends关键字,其余的用with 连接

class ConcreteLogger extends logger with Cloneable{
  override def log(msg : String) = {
    println("log log")
  }
}

//AnotherLogger一定要继承logger,否则不能混入

trait AnotherLogger extends logger{
  override def log(msgs : String) = {
    println("AnotherLog Log!")
  }
}

object Abstract extends App{
  val log = new ConcreteLogger with AnotherLogger()
  log.log("ss")
}

打印结果是什么 ?? 竟然是"AnotherLog Log!".....  Scala中使用With可以在对象中混入其它trait(不能是随便的trait,是继承了 该对象继承的trait(就是logger) 的trait)中实现的方法。

在 Scala的 trait中可以有抽象方法,也可以有实现了的方法。这时与java interface一个很大的不同。

时间: 2024-11-08 18:22:11

Scala trait的相关文章

scala的trait执行报错: 错误: 找不到或无法加载主类 cn.itcast.scala.`trait`

scala的trait执行报错: 错误: 找不到或无法加载主类 cn.itcast.scala.`trait`.Children 原因:包名写成了trait,与trait关键字重名了: package cn.itcast.scala.`trait` 解决方法:将包名trait修改为其他名字,比如traits 原文地址:https://www.cnblogs.com/mediocreWorld/p/11368233.html

学习scala trait

// 类接口,但是可以实现方法 // 作用 多重继承 trait traitA{ val tnum: Int def log(msg: String): Unit ={ println("log : " + msg) } } trait traitB extends traitA{ def test: Unit ={ log("trait tb call ") } } trait traitC extends traitB{ override def test: U

Scala Trait详解

除了从父类集成代码外,Scala中的类还允许从一个或者多个traits中导入代码.对于Java程序员来说理解traits的最好方法就是把他们当作可以包含代码的接口(interface).在Scala中,当一个类继承一个trait时,它就实现了这个trait的接口,同时还从这个trait中继承了所有的代码.让我们通过一个典型的实例来看看这种trait机制是如何发挥作用的:排序对象.能够比较若干给定类型的对象在实际应用中是很有用的,比如在进行排 序时.在Java语言中可以比较的对象是通过实现Comp

Beginning Scala study note(7) Trait

A trait provides code reusability in Scala by encapsulating method and state and then offing possibility of mixing them into classes thus allowing code reuse. #define Trait Gliding scala> trait Gliding{ | def gliding(){ println("gliding")} |

Scala入门系列(八):面向对象之trait

基础知识 1 将trait作为接口使用 此时Trait就与Java中的接口非常类似,不过注意,在Scala中无论继承还是trait,统一都是extends关键字. Scala跟Java 8前一样不支持对类进行多继承,但是支持多重继承trait,使用with关键字即可 trait HelloTrait{ def sayHello(name: String) } trait MakeFriends{ def makeFriends(p: Person) } class Person(val name

【Scala篇】--Scala中Trait、模式匹配、样例类、Actor模型

一.前述 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 模式匹配机制相当于java中的switch-case. 使用了case关键字的类定义就是样例类(case classes),样例类是种特殊的类. Actor相当于Java中的多线程. 二.具体阐述 trait特性 1.概念理解 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 与接口不同的是,它还可以定义属性和方法的实现. 一般情况下Scala的类可以继承多个Tra

Beginning Scala study note(8) Scala Type System

1. Unified Type System Scala has a unified type system, enclosed by the type Any at the top of the hierarchy and the type Nothing at the bottom of the hierarchy. All Scala types inherit from Any. # Using Any, Book extends AnyRef, and x is an Int that

Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/pR_4sY0cJLs/优酷:http://v.youku.com/v_show/id_

Scala 深入浅出实战经典 第49课 Scala中Variance代码实战(协变)

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2 技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群 DT大数据梦工厂① :462923555 DT大数据梦工厂②:437123764 DT大数据梦工厂③