重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“Scala的Trait怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scala的Trait怎么使用”吧!
十载的矿区网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整矿区建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“矿区网站设计”,“矿区网站推广”以来,每个客户项目都认真落实执行。
Trait概述:
1.Scala中Trait 为重用代码的一个基本单位,首先Trait可以作为接口使用,这时候Trait跟Java的接口Interface类类似,另外Trait还可以定义抽象方法,这里又跟Java的抽象类的抽象方法一样。
2.类可以作为使用extrends关键字集成Trait,这里与java的implement不一致,scala中没有implement关键字,不管是继承类还是继承自Trait都是extrends。
3.类继承Trait后,必须实现其中的抽象方法,但不需要使用override关键字,同时Scala同Java一样,不支持类多继承,但支持多重继承Trait,使用with关键字即可。
Ttrait作为接口使用:
代码实例:
定义一个Student类分别继承Trait StudentInfo和MakeFrends
package com.hadoop.ljs.spark.study.TraitTest
/**
* @author: Created By lujisen
* @company ChinaUnicom Software JiNan
* @date: 2020-02-12 20:05
* @version: v1.0
* @description: com.hadoop.ljs.spark.study.`trait`
*/
trait StudentInfo{
def printName(name:String)
}
trait MakeFrends{
def makeFriend(student: Student)
}
class Student(name:String) extends StudentInfo with MakeFrends {
var myName=name
def printName(name2:String): Unit= {
println("hello "+name2+", my name is "+myName)
}
def makeFriend(s: Student): Unit ={
println("i am "+myName+" ,i want to make friends with you "+s.myName)
}
}
主函数测试类StudentTraitTest:
package com.hadoop.ljs.spark.study.TraitTest
/**
* @author: Created By lujisen
* @company ChinaUnicom Software JiNan
* @date: 2020-02-12 20:14
* @version: v1.0
* @description: com.hadoop.ljs.spark.study.`trait`
*/
object StudentTraitTest {
def main(args: Array[String]): Unit = {
val student1=new Student("ljs1")
val student2=new Student("ljs2")
student1.printName("ljs3")
student1.makeFriend(student2)
}
}
Trait定义具体方法实现:
Trait不仅可以作为接口定义抽象方法,还可以定义具体方法
代码实例:
定义一个Student2类继承Trait StudentInfo2
package com.hadoop.ljs.spark.study.TraitTest/** * @author: Created By lujisen * @company ChinaUnicom Software JiNan * @date: 2020-02-12 20:31 * @version: v1.0 * @description: com.hadoop.ljs.spark.study.TraitTest */trait StudentInfo2{ def printName(name:String): Unit ={ println("I am trait StudentInfo ,my name is:"+name) }}class Student2() extends StudentInfo2{ def printName2(name: String): Unit ={ printName(name) println("I am class Student2,my name is:"+name) }}
主函数测试类Student2TraitTest:
package com.hadoop.ljs.spark.study.TraitTest/** * @author: Created By lujisen * @company ChinaUnicom Software JiNan * @date: 2020-02-12 20:34 * @version: v1.0 * @description: com.hadoop.ljs.spark.study.TraitTest */object Student2TraitTest { def main(args: Array[String]): Unit = { val student3=new Student2() student3.printName("ljs3") }}
Trait中定义抽象字段
Trait中可以定义抽象字段,且Trait中具体方法,可以使用定义的抽象字段,但是Trait的继承类,必须要覆盖该字段,指定具体的值
代码实例:
定义Trait StudentInfo3含有抽象字段score,Class Student3继承它,必须要给抽象字段赋值,不然报错。
package com.hadoop.ljs.spark.study.TraitTest/** * @author: Created By lujisen * @company ChinaUnicom Software JiNan * @date: 2020-02-12 20:45 * @version: v1.0 * @description: com.hadoop.ljs.spark.study.TraitTest */trait StudentInfo3{ val score:String def printScore(): Unit ={ println("printScore :"+score) }}class Student3 extends StudentInfo3{ override val score: String = "ljs5" def printScore2(): Unit ={ println("printScore2 :"+score) }}
主函数测试类Student3TraitTest
package com.hadoop.ljs.spark.study.TraitTest
/**
* @author: Created By lujisen
* @company ChinaUnicom Software JiNan
* @date: 2020-02-12 20:51
* @version: v1.0
* @description: com.hadoop.ljs.spark.study.TraitTest
*/
object Student3TraitTest {
def main(args: Array[String]): Unit = {
val student=new Student3()
student.printScore()
student.printScore2()
}
}
到此,相信大家对“Scala的Trait怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!