Scala trait介绍
2015-12-07 22:40
369 查看
请看以下代码:
package com.yy.oop
//简单的trait介绍
trait MyTrait1{
println("MyTrait1 start...")
def speak(name:String)
}
//含有具体实现方法的trait
trait MyTrait2{
println("MyTrait2 start...")
def speak(name:String)
//具体实现
def say = println("hello,MyTrait2.")
}
//含有抽象字段的trait
trait MyTrait3{
println("MyTrait3 start...")
//抽象字段
var t3:String
def speak(name:String)
}
//含有具体字段的trait
trait MyTrait4{
println("MyTrait4 start...")
var t4:String = "It's me,MyTrait4."
def speak(name:String)
}
/**
* 验证功能:
* 1:多个Trait的语法格式:with
* 2:多个Trait的构造顺序:extends后的第一个--》从左到右的with trait --》本身类
*/
class ConcreteMyTrait1 extends MyTrait4 with MyTrait3 with MyTrait2{
println("ConcreteMyTrait1 start...")
override var t3 = "overrider MyTrait3 t3"
override def speak(name:String){
println("name: " + name)
}
}
object TraitTest {
def main(args: Array[String]): Unit = {
val obj = new ConcreteMyTrait1()
obj.speak("ConcreteMyTrait1")
}
}
2、结果如下
MyTrait4 start...
MyTrait3 start...
MyTrait2 start...
ConcreteMyTrait1 start...
name: ConcreteMyTrait1
从上面例子可以看出以下几点:
(1)trait可以包含抽象方法
(2)trait可以包含具体方法
(3)trait可以包含抽象字段
(4)trait可以包含具体字段
(5)多个trait共同实现使用with
(6)trait的构造顺序:从左到右依次构造,最后是本类
(7)trait的构造器是无参构造器,不能定义带参构造器
package com.yy.oop
//简单的trait介绍
trait MyTrait1{
println("MyTrait1 start...")
def speak(name:String)
}
//含有具体实现方法的trait
trait MyTrait2{
println("MyTrait2 start...")
def speak(name:String)
//具体实现
def say = println("hello,MyTrait2.")
}
//含有抽象字段的trait
trait MyTrait3{
println("MyTrait3 start...")
//抽象字段
var t3:String
def speak(name:String)
}
//含有具体字段的trait
trait MyTrait4{
println("MyTrait4 start...")
var t4:String = "It's me,MyTrait4."
def speak(name:String)
}
/**
* 验证功能:
* 1:多个Trait的语法格式:with
* 2:多个Trait的构造顺序:extends后的第一个--》从左到右的with trait --》本身类
*/
class ConcreteMyTrait1 extends MyTrait4 with MyTrait3 with MyTrait2{
println("ConcreteMyTrait1 start...")
override var t3 = "overrider MyTrait3 t3"
override def speak(name:String){
println("name: " + name)
}
}
object TraitTest {
def main(args: Array[String]): Unit = {
val obj = new ConcreteMyTrait1()
obj.speak("ConcreteMyTrait1")
}
}
2、结果如下
MyTrait4 start...
MyTrait3 start...
MyTrait2 start...
ConcreteMyTrait1 start...
name: ConcreteMyTrait1
从上面例子可以看出以下几点:
(1)trait可以包含抽象方法
(2)trait可以包含具体方法
(3)trait可以包含抽象字段
(4)trait可以包含具体字段
(5)多个trait共同实现使用with
(6)trait的构造顺序:从左到右依次构造,最后是本类
(7)trait的构造器是无参构造器,不能定义带参构造器
相关文章推荐
- crossDomain、allowDomain()、allowScriptAccess三者的关系
- 使用SVN clang: error: linker command failed with exit code 1 (use -v to see invocation)
- 详解Linux内核红黑树算法的实现 http://blog.csdn.net/npy_lp/article/details/7420689
- int main (int argc,char *argv[])和int mian()
- 2015(1108-1207)_AidanDai
- 人工智能:第四章 计算智能(1)
- 人工智能:第三章 搜索推理技术
- Exists/In/Any/All/Contains操作符
- 人工智能:第二章 知识表示方法
- 人工智能:第一章 绪 论
- C++的运算符重载 http://blog.csdn.net/zgl_dm/article/details/1767201
- C++运算符重载http://blog.csdn.net/wangfengwf/article/details/11580653
- win7 报错 failed to install servicefailed installing
- opencv_traincascade的使用学习
- 对话屏幕Dynpro(SE51) 屏幕元素 屏幕属性 PAI事件的触发、屏幕元素Function Code设置 屏幕流逻辑Screen Flow Logic 对话屏幕中的字段命名大小写问题
- POJ 1273 Drainage Ditches
- waiting for table metadata lock 问题深入分析
- http://blog.csdn.net/shanshanpt/article/details/39852249
- Daily Scrum - 12/07
- 磁盘,卷,分区和驱动器的关系 基本磁盘-动态磁盘-GPT磁盘-MBR磁盘-RAID阵列磁盘的区别 资料整理