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 MixTraitUse(val name:String) extends Logs {
def sayHello{
println("hello " + name)
log("sayHello method invoked!!")
}
}
object MixTraitUseTest{
def main(args: Array[String]): Unit = {
val mix1 = new MixTraitUse("yxj")
mix1.sayHello
val mix2 = new MixTraitUse("yyy") with MyLog
mix2.sayHello
}
trait Handler {
def handler(data: String) {}
}
trait DataValidTrait extends Handler {
override def handler(data: String): Unit = {
println("this is DataValidTrait handler invoked.")
super.handler(data)
}
}
trait SignatureTrait extends Handler {
override def handler(data: String): Unit = {
println("this is SignatureTrait handler invoked.")
super.handler(data)
}
}
class ChainPerson(name: String) extends SignatureTrait with DataValidTrait {
def sayHello(data: String) {
println("sayHello from " + name)
handler(data)
}
}
object TraitChainUse {
def main(args: Array[String]): Unit = {
val p1 = new ChainPerson("yxj")
p1.sayHello("chanin data")
}
}
trait Loger {
println("loger constructor ..")
}
trait MyLoger extends Loger{
println("MyLoger constructor...")
}
trait TimeLoger extends Loger{
println("TimeLogers constructor...")
}
class TraitConstructor {
println("trait constructor")
}
class SubTrait extends TraitConstructor with MyLog with TimeLoger {
println("subtrait contructor...")
}
object tcT{
def main(args: Array[String]): Unit = {
val sub = new SubTrait
}
}
class People(val name:String) extends Log {
def makeFriends(p:People) ={
println("hello, " + p.name + " i'm " + name + ",i want to make friends with you ")
log("makeFriends method invoked with parameter " + p.name)
}
}
object TraitLoggerUse{
def main(args: Array[String]): Unit = {
val s1 = new People("yxj")
val s2 = new People("wulanlan")
s1.makeFriends(s2)
}
}
trait HelloTrait{
def sayHello(name:String)
}
/**
* trait 中定义的field,继承的类,可以直接获取到使用
*
*/
trait MakeTrait{
val eyeNum:Int = 2
def makeFriends(p:Person)
}
class Person(val name:String) extends HelloTrait with MakeTrait {
def sayHello(otherName:String) = {
println("hello " +otherName + ", im " + name + ", i have " + eyeNum + " eyes.")
}
def makeFriends(p: Person): Unit = {
println("hello " + p.name + ",i'm " + name + ",i want to make friends with you.")
}
}
object useTrait{
def main(args: Array[String]): Unit = {
val p1 = new Person("yxj")
val p2 = new Person("wulanlan")
p1.sayHello("yy")
p2.sayHello("zz")
p1.makeFriends(p2)
}
}
scala中Trait简单使用的更多相关文章
- scala中Array简单实用
/** * 在scala中数组的使用 * 和java很类似,初始化后,长度就固定了,而且元素全部根据其类型初始化 * */ object arrayUse { def main(args: Array ...
- 【Scala篇】--Scala中Trait、模式匹配、样例类、Actor模型
一.前述 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 模式匹配机制相当于java中的switch-case. 使用了case关键字的类定义就是样例类(case ...
- scala中Tuple简单使用
/** * Tuple简单使用记录 * 最大22个参数 */ object TupleUse { def main(args: Array[String]): Unit = { // 简单Tuple ...
- scala中ArrayBuffer简单使用
import scala.collection.mutable.ArrayBuffer /** * 与Array区别: * 1.Array是不可变的,不能直接地对其元素进行删除操作,只能通过重赋值或过 ...
- scala中函数简单使用记录
object funcHighLevel { def main(args: Array[String]): Unit = { // 创建一个匿名函数 val sayFunc = (name: Stri ...
- Scala 中 object、class 与 trait 的区别
Scala 中 object.class 与 trait 的区别 引言 当你刚入门 Scala,肯定会迫不及待想要编写自己的第一个 Scala 程序.如果你已经在交互模式下敲过 Scala 代码,想必 ...
- 第2节 Scala中面向对象编程:12、13、14、15、16、trait
6.4. Scala中面向对象编程之trait 6.4.1. 将trait作为接口使用 Scala中的trait是一种特殊的概念: 首先先将trait作为接口使用,此时的trait就与Java ...
- Scala中的语言特性是如何实现的(3) -- Trait
我的新博客地址:http://cuipengfei.me/blog/2013/10/13/scala-trait/ 我在Coursera上跟了一门叫做Functional Programming Pr ...
- scala中的trait
这里的trait字面意思是特质或者特征,这个词翻译成特征比较合适.它的意义和java,c#中接口很类似.但是trait支持部分实现,也就是说可以在scala的trait中可以实现部分方法. 下面我们以 ...
随机推荐
- Android 增量更新完全解析 是增量不是热修复(转)
转自:http://blog.csdn.net/lmj623565791/article/details/52761658 本文在我的微信公众号:鸿洋(hongyangAndroid)首发. 转载请标 ...
- java程序中的多线程(转)
为什么会排队等待? 下面的这个简单的 Java 程序完成四项不相关的任务.这样的程序有单个控制线程,控制在这四个任务之间线性地移动.此外,因为所需的资源 ― 打印机.磁盘.数据库和显示屏 -- 由于硬 ...
- Java文件拷贝方式
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11444284.html 利用java.io类库,直接为源文件构建一个FileInputStream读取 ...
- png图标任意赋色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- git——commit之后一直出现一个>
在网上搜了半天,也没见过有类似的情况,忘记具体是怎么解决的了,我记得是重新add了一遍,再commit就OK了 更新: 感谢@月下初拥的评论,找到了原因,可能是由于commit的注释结构有误造成的,比 ...
- Tyvj 1518 CPU监控(线段树)
题目描述: Bob需要一个程序来监视CPU使用率.这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事. Bob会干很多事,除了跑暴力程序看视频之外,还会做出去玩玩和用 ...
- cf期望概率专题
cf1009E:求到第i段期望和的比较困难,但是单独求每段的期望是比较容易的,所以单独对每段求和,然后累计总和 E[i]=1/2*a1+1/4*a2+...+1/2^(i-1)*ai-1+1/2^(i ...
- (转)深刻理解Linux进程间通信(IPC)
转:http://www.ibm.com/developerworks/cn/linux/l-ipc/index.html 序 linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来 ...
- linux python3 venv 虚拟环境报错 [-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 2.
解决办法: 先创建没有pip的虚拟环境,然后启动虚拟环境后,再安装pip 办法一: 亲测失败了... python3 -m venv --without-pip py36env 办法二 sudo ap ...
- matlab中的 ndims(a)、length(a)、size(a) 分别是什么意思?
size(a)表示矩阵每个维度的长度比如size([1 2 3;4 5 6])等于[2 3]表示他有2行3列size([1 2 3])等于[1 3]表示他有1行3列另外size(a,n)表示矩阵a在第 ...