关于scala的trait

  最近一个月在学习scala,今天刚对trait有点感觉,所以记下来.....

  trait在scala中被称作特质,在我个人理解,trait就相当于java中interface和abstract class的结合体,又可以混入多个trait,又可以在trait写具体的方法实现,通过with这个trait,就可以在类里使用trait的方法,其他类在调用某个方法时,如果这个类里没有这个方法,则会去trait里找。而且Atrait混入了另一个Btrait,则所有混入Atrait的子类都拥有Btrait的所有非抽象方法。

时间: 2024-08-01 19:37:09

关于scala的trait的相关文章

Scala:trait

Scala开篇(目录) 在Scala中有一个trait类型,它可以被继承,而且支持多重继承,其实它更像我们熟悉的接口(interface),但它与接口又有不同之处是: trait中可以写方法的实现,interface不可以(java8开始支持接口中允许写方法实现代码了),这样看起来trait又很像抽象类(abstract),一会我们会通过反编译,看看Scala中对trait是怎样处理的,先来看看trait的使用. //声明一个 trait trait TraitBase{ def add(x:I

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学习笔记

scala中提供的trait(特质)和Java中的Interface有很多相似之处.都可以持有方法的声明和属性,但是trait还有比interface强大的多的其他用法. 1. trait可以带有方法实现: 2. trait与interface一样,可以互相继承.但是trait可以继承自某个类,但是这种特质只能够混入父类的子类中,不能随意混入: 3. trait中可以在运行时动态调用方法. 下面举一个trait使用的例子. 首先定义一个虚类IntQueue和特质Logger abstract c

scala 14 trait

DT大数据梦工厂scala的所有视频.PPT和代码在百度云盘的链接:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group <Scala深入浅出实战初级入门经典视频课程>http://edu.51cto.com/lesson/id-66538.html <Scala深入浅出实战中级进阶经典视频课程>http://edu.51cto.com/lesson/id-6713

scala 用trait还是用abstract class

package com.scala.idle object TraitOrAbstractClass { def main(args: Array[String]): Unit = { } } /** * 继承两个trait,N多方便啊! */ class TestClass000 extends Trait000 with Trait001{ } /** * 继承两个abstract class,Error了.Error信息如下: * Multiple markers at this line

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

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

scala中Trait简单使用

trait Log { def log(message:String) = println("log:" + message) } /** * 为实例混入trait * */ trait Logs{ def log(message:String){} } trait MyLog extends Logs { override def log(message: String): Unit = { println("log:" + message) } } class

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

scala学习手记31 - Trait

不知道大家对java的接口是如何理解的.在我刚接触到接口这个概念的时候,我将接口理解为一系列规则的集合,认为接口是对类的行为的规范.现在想来,将接口理解为是对类的规范多少有些偏颇,更恰当些的观点应该是:相对于类来说,接口是更深层次的抽象,虽然同时接口也起到了规定类的行为的作用. 和java的接口比起来,scala的Trait可能更具体一些.正如Trait的含义一样,它指的是一种特质,如果认为类有某种特质就混入对应的Trait好了.在scala中,类是对现实某一类事务的建模,而Trait则是对已有