Scala中Trait是一种特殊概念

首先我们可以将Triat做为接口来使用,此时的Triat就与java中的接口非常相似

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

类可以使用extend是关键字来继承Triat,注意这里不是Implement,而是extends,在Scala中没有Implement的概念,无论是继承还是Triat都是extends

类继承Triat后,必须实现其中的抽象方法,实现是不需要override关键字

Scala不支持对类进行多继承,但是支持多重继承triat,使用with关键字即可

triat sayHello{
def sayHello(name:String)
} triat makeFriends{
def makeFriends(p:Person)
} class Person(val name:String) extends sayHello with makeFriends{
def sayHello(otherName:String)= println("hello,"+otherName+",i'm"+name)
def makeFriends(p:Person) = println("Hello"+p.name+",I'm"+name+"i want to make friend with you ")
} val p = new Person("leo")
val p2 = new Person("jack") p.sayHello("jack")
p.makeFriends(p2

在Triat中定义具体方法

Scala中的Triat可以不是只定义抽象方法,还可以定义具体方法,此时的Triat更像是包含了通用工具方法的东西

有一个专有名词来形容这种情况,就是说Triat的功能混入了类

举例来说,triat中可以包含一些很多类都通用的功能方法,比如打印日志,sprak中就使用了triat来定义了通用日志打印法

triat Logger{
def log(message:String) = prinl("msg:"message)
} class Person(val name:String) extends Logger{
def makeFrinds(p:Person){
println("Hi,i'm"+name+",i'm glad to make friends with you ,"+p.name)
log("make friends method is invoked with parameter Person[name="+p.name+"]")
}
}

在Triat中定义具体字段

Scala中Triat可以定义具体field,此时继承triat就自动获取了triat中定义的field

但这种获取field的方式与继承扯拉学说是不同的:如果是继承class获取的field,实际是定义在父类中的。而继承triat获取的field,就直接被添加到类中

triat Person{
val eyeNum =2
} class student(name:String) extends Person{ def sayHello =println("Hi ,i'm "+name+",I have "+eyeNum+"eyes")
}

在triat中定义抽象字段

Scala中Triat可以定义抽象filed,triad中的具体方法可以依据抽象filed来编写

但是继承triat类,侧必须覆盖抽象filed,提供具体值

triat SayHello{
val mes:String
def sayHello(name:String) = println(mes+","+name)
} class Person(name:String) extends SayHello{
val msg:Stirng = "hello"
def makeFriends(p:Person){
sayHello()
println("I'm"+name+", I want to make friends with you !")
}
}

Scala编程入门---面向对象编程之Trait的更多相关文章

  1. Scala编程入门---面向对象编程之Trait高级知识

    trait调用链 Scala中支持让类继承多个Trait后,依次调用多个Trait中的同一个方法,只要让多个trait的同一个方法中,在最后都执行super.方法即可 类中调用多个trait中都有这个 ...

  2. Scala编程入门---面向对象编程之对象

    对象 Object,相当于class单个实例,通常在里面放一些静态的filed或method 第一次调用object方法时候,就会执行object的constructor,也就是Object中不在me ...

  3. scala学习笔记-面向对象编程之Trait

    将trait作为接口使用 1 // Scala中的Triat是一种特殊的概念 2 // 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似 3 // 在triat中可 ...

  4. 8、scala面向对象编程之Trait

    一.Trait基础 1.将trait作为接口使用 // Scala中的Triat是一种特殊的概念 // 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似 // 在t ...

  5. 10、scala面向对象编程之Trait

    1.  将trait作为接口使用 2.trait中定义具体方法 3.trait定义具体字段 4.trait中定义抽象字段 5.为实例对象混入trait 6.trait调用链 7.在trait中覆盖抽象 ...

  6. Scala 面向对象编程之Trait

    将trait作为接口使用 // Scala中的Triat是一种特殊的概念 // 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似 // 在triat中可以定义抽象方 ...

  7. Scala编程入门---函数式编程

    高阶函数 Scala中,由于函数时一等公民,因此可以直接将某个函数传入其他函数,作为参数.这个功能是极其强大的,也是Java这种面向对象的编程语言所不具备的. 接收其他函数作为函数参数的函数,也被称作 ...

  8. Scala编程入门---函数式编程之集合操作

    集合的函数式编程: 实战常用: //map案例实战:为List中的每个元素都添加一个前缀. List("leo","Jen","peter" ...

  9. Scala编程入门---Map与Tuple

    创建Map //创建一个不可变的Map val ages = Map("Leo" -> 30,"Jen" ->25,"Jack" ...

随机推荐

  1. Volley网络框架完全解析(使用篇)

    在Android中,网络请求无非就这两种:HttpURLConnection和HttpClient( Apache),我们在使用时一般都会对它们进行一系列的封装,但是这过程不免有些繁琐,所以,Goog ...

  2. Chapter 2 User Authentication, Authorization, and Security(4):限制SA帐号的管理权限

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38817915,专题目录:http://blog.csdn.net/dba_huangzj ...

  3. oracle ebs应用产品安全性-定义访问权限集

    定义 定义访问权限集是一项分配至责任层的可选的安全功能,是对Oracle 11i应用产品弹性域安全性定义的功能扩展,对总帐管理模块的一些内容进行安全性定义和权限分配的集合,以控制不同的责任对一些内容的 ...

  4. 【一天一道LeetCode】#27. Remove Element

    一天一道LeetCode系列 (一)题目 Given an array and a value, remove all instances of that value in place and ret ...

  5. Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值

    Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇 ...

  6. SpriteBuilder中如何平均拉伸精灵帧动画的距离

    首先要在Timeline中选中所有的精灵帧,可以通过如下2种的任意一种办法达成: 1按下Shift键的同时鼠标单击它们 2鼠标在Timeline空白区拖拽直到拉出的矩形包围住所有精灵帧方块后放开鼠标. ...

  7. LeetCode之“链表”:Rotate List

    题目链接 题目要求: Given a list, rotate the list to the right by k places, where k is non-negative. For exam ...

  8. Linux自动安装JDK的shell脚本

    Linux自动安装JDK的shell脚本 A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在 ...

  9. 能量最小化初探,graphcuts能量最小化调用

    1.相对于能量函数来说,能量最小化的办法都有哪些? 梯度下降 模拟退火 图割 2.这个 跟最优化问题的求解,有什么联系跟区别呢? 基本上差不多,其实就是求出来了函数的一个最小值,我们看问题的时候不妨把 ...

  10. java基础多线程之共享数据

    java基础巩固笔记5-多线程之共享数据 线程范围内共享数据 ThreadLocal类 多线程访问共享数据 几种方式 本文主要总结线程共享数据的相关知识,主要包括两方面:一是某个线程内如何共享数据,保 ...