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. phantomjs的使用+Java代码+依赖js(兼容Linux和windows版本)

    1.  在使用phantomjs的时候需要下载phantomjs,网上有window版本和Linux版本.将phantomjs放在Linux上的指定位置之后(如下面的/home/tpl/phantom ...

  2. Mysql中limit的用法详解

    Mysql中limit的用法详解 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,为我们提供了limit这样一个功能. SELECT * FROM table LIMIT [offset ...

  3. JSON 的数据转换格式(DataTable或DataSet) -善良公社项目

    这两天在使用JqueryEasyUI框架绑定数据并实现自动分页时,由于框架的限制需要使用Json数据的来传递与获取数据: JSON的全称是JavaScript Object Notation, 是一种 ...

  4. android TabLayout实现京东详情效果

    Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android Design Support Library,在这个supp ...

  5. 第一篇、vlc-android之开篇介绍

    转载请注明出处:http://blog.csdn.net/cuiran/article/details/30054835 最近一直研究android的视频直播部分,从最开始的直接播放本地视频文件,到使 ...

  6. 数据的压缩存储与解压缩算法实现(C语言)

    在一些嵌入式的项目设计中,空间是相当宝贵的,因为一个CPU的存储是有限的,所以此时我们在保存数据的时候,喜欢来进行压缩保存,著名的有哈夫曼树算法,专门用来做压缩的算法,当然,本节我们不讨论这些稍微高级 ...

  7. linux进程管理之进程创建

    所谓进程就是程序执行时的一个实例. 它是现代操作系统中一个很重要的抽象,我们从进程的生命周期:创建,执行,消亡来分析一下Linux上的进程管理实现. 一:前言 进程管理结构; 在内核中,每一个进程对应 ...

  8. 匿名函数,结合闭包的写法,js对象的案例

    /* * name :Zuoquan Tu * mail :tuzq@XXX.com.cn * date :2015/04/1 * version :1.1 * description:modifie ...

  9. 03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写

     1  案例场景,通过C语言回调Java的代码,案例的最终界面: 2  案例的代码结构如下: 3 编写DataProvider的代码: package com.example.ndkcallbac ...

  10. android混淆和反编译

    混淆 Android Studio:  只需在build.gradle(Module:app)中的buildTypes中增加release的编译选项即可,如下: <code class=&quo ...