scala中Trait简单使用
- trait Log {
- def log(message:String) = println("log:" + message)
- }
- /**
- * 为实例混入trait
- *
- */
- trait Logs{
- def log(message:String){}
- }
- trait MyLog extends Logs {
- override def log(message: String): Unit = {
- println("log:" + message)
- }
- }
- class MixTraitUse(val name:String) extends Logs {
- def sayHello{
- println("hello " + name)
- log("sayHello method invoked!!")
- }
- }
- object MixTraitUseTest{
- def main(args: Array[String]): Unit = {
- val mix1 = new MixTraitUse("yxj")
- mix1.sayHello
- val mix2 = new MixTraitUse("yyy") with MyLog
- mix2.sayHello
- }
- trait Handler {
- def handler(data: String) {}
- }
- trait DataValidTrait extends Handler {
- override def handler(data: String): Unit = {
- println("this is DataValidTrait handler invoked.")
- super.handler(data)
- }
- }
- trait SignatureTrait extends Handler {
- override def handler(data: String): Unit = {
- println("this is SignatureTrait handler invoked.")
- super.handler(data)
- }
- }
- class ChainPerson(name: String) extends SignatureTrait with DataValidTrait {
- def sayHello(data: String) {
- println("sayHello from " + name)
- handler(data)
- }
- }
- object TraitChainUse {
- def main(args: Array[String]): Unit = {
- val p1 = new ChainPerson("yxj")
- p1.sayHello("chanin data")
- }
- }
- trait Loger {
- println("loger constructor ..")
- }
- trait MyLoger extends Loger{
- println("MyLoger constructor...")
- }
- trait TimeLoger extends Loger{
- println("TimeLogers constructor...")
- }
- class TraitConstructor {
- println("trait constructor")
- }
- class SubTrait extends TraitConstructor with MyLog with TimeLoger {
- println("subtrait contructor...")
- }
- object tcT{
- def main(args: Array[String]): Unit = {
- val sub = new SubTrait
- }
- }
- class People(val name:String) extends Log {
- def makeFriends(p:People) ={
- println("hello, " + p.name + " i'm " + name + ",i want to make friends with you ")
- log("makeFriends method invoked with parameter " + p.name)
- }
- }
- object TraitLoggerUse{
- def main(args: Array[String]): Unit = {
- val s1 = new People("yxj")
- val s2 = new People("wulanlan")
- s1.makeFriends(s2)
- }
- }
- trait HelloTrait{
- def sayHello(name:String)
- }
- /**
- * trait 中定义的field,继承的类,可以直接获取到使用
- *
- */
- trait MakeTrait{
- val eyeNum:Int = 2
- def makeFriends(p:Person)
- }
- class Person(val name:String) extends HelloTrait with MakeTrait {
- def sayHello(otherName:String) = {
- println("hello " +otherName + ", im " + name + ", i have " + eyeNum + " eyes.")
- }
- def makeFriends(p: Person): Unit = {
- println("hello " + p.name + ",i'm " + name + ",i want to make friends with you.")
- }
- }
- object useTrait{
- def main(args: Array[String]): Unit = {
- val p1 = new Person("yxj")
- val p2 = new Person("wulanlan")
- p1.sayHello("yy")
- p2.sayHello("zz")
- p1.makeFriends(p2)
- }
- }
scala中Trait简单使用的更多相关文章
- scala中Array简单实用
/** * 在scala中数组的使用 * 和java很类似,初始化后,长度就固定了,而且元素全部根据其类型初始化 * */ object arrayUse { def main(args: Array ...
- 【Scala篇】--Scala中Trait、模式匹配、样例类、Actor模型
一.前述 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 模式匹配机制相当于java中的switch-case. 使用了case关键字的类定义就是样例类(case ...
- scala中Tuple简单使用
/** * Tuple简单使用记录 * 最大22个参数 */ object TupleUse { def main(args: Array[String]): Unit = { // 简单Tuple ...
- scala中ArrayBuffer简单使用
import scala.collection.mutable.ArrayBuffer /** * 与Array区别: * 1.Array是不可变的,不能直接地对其元素进行删除操作,只能通过重赋值或过 ...
- scala中函数简单使用记录
object funcHighLevel { def main(args: Array[String]): Unit = { // 创建一个匿名函数 val sayFunc = (name: Stri ...
- Scala 中 object、class 与 trait 的区别
Scala 中 object.class 与 trait 的区别 引言 当你刚入门 Scala,肯定会迫不及待想要编写自己的第一个 Scala 程序.如果你已经在交互模式下敲过 Scala 代码,想必 ...
- 第2节 Scala中面向对象编程:12、13、14、15、16、trait
6.4. Scala中面向对象编程之trait 6.4.1. 将trait作为接口使用 Scala中的trait是一种特殊的概念: 首先先将trait作为接口使用,此时的trait就与Java ...
- Scala中的语言特性是如何实现的(3) -- Trait
我的新博客地址:http://cuipengfei.me/blog/2013/10/13/scala-trait/ 我在Coursera上跟了一门叫做Functional Programming Pr ...
- scala中的trait
这里的trait字面意思是特质或者特征,这个词翻译成特征比较合适.它的意义和java,c#中接口很类似.但是trait支持部分实现,也就是说可以在scala的trait中可以实现部分方法. 下面我们以 ...
随机推荐
- Manjaro配置中国源
1.自动寻找中国源 sudo pacman-mirrors -i -c China -m rank//更新镜像排名sudo vim /etc/pacman.d/mirrorlist //查看选择的源s ...
- celery使用的小记录
一篇还不错的入门说明: http://www.bjhee.com/celery.html, 官方文档: http://docs.jinkan.org/docs/celery/getting-start ...
- CodeForces - 337D 树形dp
题意:一颗树上有且仅有一只恶魔,恶魔会污染距离它小于等于d的点,现在已经知道被污染的m个点,问恶魔在的可能结点的数量. 容易想到,要是一个点到(距离最远的两个点)的距离都小于等于d,那么这个点就有可能 ...
- 笔记62 Spring Boot快速入门(二)
SpringBoot部署 一.jar方式 1.首先安装maven. <1>下载最新的maven版本:https://maven.apache.org/download.cgi <2& ...
- linux配置java环境变量(详细)(转)
linux配置java环境变量(详细) 一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录, 执行命令 ./jdk-6u14-linux-i586. ...
- Eclipse编辑Spring配置文件xml时自动提示类class包名
第一步,先查看下自己的Eclipse是什么版本,步骤如下: 1.1 点击Eclipse菜单‘Help -> About Eclipse’,如下图: 1.2 点击Eclipse图标如下,看清楚哦 ...
- 安装配置oh-my-zsh
1.下载安装iterm:https://www.iterm2.com/ 2.安装zsh 查看系统当前使用的shell $ echo $SHELL /bin/bash 查看系统是否安装了zsh $ ca ...
- oracle查询重复数据出现次数
话不多数上代码: 我在Oracle数据库查数据,发现重复数据,于是我想把重复条数以及具体数据查出来: 下面是数据 然后我需要知道重复多少条 (重复十条,也就是有五条数据相同) SQL: select ...
- java 获取的是本地的IP地址
1 public static void main(String[] args) { 2 try { 3 InetAddress address = InetAddress.getLocalHost( ...
- sql 数据库
在关系数据库中,最常用的操作就是查询.直线电机推杆 准备数据 为了便于讲解和练习,我们先准备好了一个students表和一个classes表,它们的结构和数据如下: students表存储了学生信息: ...