本篇内容主要讲解“Scala的Trait怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scala的Trait怎么使用”吧!
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怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/2380815/blog/4453971