千家信息网

Scala trait的对象怎么使用

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,本篇内容主要讲解"Scala trait的对象怎么使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Scala trait的对象怎么使用"吧!一、trai
千家信息网最后更新 2024年11月22日Scala trait的对象怎么使用

本篇内容主要讲解"Scala trait的对象怎么使用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Scala trait的对象怎么使用"吧!

一、trait

trait Logger {
def log(msg: String)
}

class ConsoleLogger extends Logger with Serializable{
def log(msg: String) {println(msg)}
}

注意,没有implements,用extends就好了,另外,这里其实也是override,但是不需要写上。log在Logger当中是抽象的,如果要实现多个trait,用with连上就行了。另外,跟java一样,一个父类+若干个Interface

二、有具体实现的特质

trait Logger {
def log(msg: String) {println(msg)}
}

class Account(val name: String, val password: String) extends Logger {
def check() = {log("Account = " + name + " and password = " + password); name == "bajie" && password == "change" }
}

object Account {
def main(args: Array[String]) {
val acc = new Account("bajie", "change")
acc.check
}
}

前一节当中,对trait的使用,类似于java的interface。那么本节当中,它该怎么理解?

三、带有trait的对象

trait Logger {
def log(msg: String) {}
}

trait ConsoleLogger extends Logger {
override def log(msg: String) {println(msg)}
}

class Account(val name: String, val password: String) extends Logger {
def check() = {log("Account = " + name + " and password = " + password); name == "bajie" && password == "change" }
}

object Account {
def main(args: Array[String]) {
val acc = new Account("bajie", "change")
acc.check

val acc1 = new Account("bajie", "change") with ConsoleLogger
acc1.check
}
}

又做了一些修改, Logger.log有一个空实现, ConsoleLogger.log干了活了, Account 混合了 Logger ,所以 acc.check ,并不做输出的工作,而 val acc1 = new Account("bajie", "change") with ConsoleLogger ,acc1.check有输出了。

好吧,目前我还想不清楚这样的一种设计,具体应该用来完成什么样的工作,但是它一定是有用的,尽量记住它吧。

四、特质的叠加(屌爆了)

trait Logger {
def getLog: String = "I am the root; "
}

trait ConsoleLogger extends Logger {
override def getLog = super.getLog + "Something happend "
}

trait TimeLogger extends Logger{
override def getLog = super.getLog + "at " + new Date() + " "
}

class Account(val name: String, val password: String) extends Logger {
def check() = {println(getLog); name == "bajie" && password == "change" }
}

object Account {
def main(args: Array[String]) {
val acc1 = new Account("bajie", "change") with TimeLogger with ConsoleLogger
acc1.check

val acc2 = new Account("bajie", "change") with ConsoleLogger with TimeLogger
acc2.check
}
}

最后是输出

I am the root;
I am the root; at Fri Aug 12 01:32:24 PDT 2016 Something happend
I am the root; Something happend at Fri Aug 12 01:32:24 PDT 2016

体会一下吧,说不清楚了!

五、interface + abstract class

trait Logger {
def log(message: String)
def info(message: String) {println(message)}
}

class Account extends Logger {
var accName = "bajie"
var accPass = "change"
def check() = {info("a user login "); accName == "bajie" && accPass == "change"}

def log(message: String) { println(message) }
}

在这里Logger,既是一个interface,又是一个abstract class。Account可以直接使用info方法,又必须自己实现log方法。

六、具体属性和抽象属性

trait Logger {
def log(message: String)
def info(message: String) {println(message)}

val logLevel: Int
val maxlength = 20
}

class Account extends Logger {
var accName = "bajie"
var accPass = "change"
def check() = {info("a user login "); accName == "bajie" && accPass == "change"}

def log(message: String) { println(message) }

val logLevel = 3
}

和前面一节类似,属性也有具体和抽象之分,具体字段可以再Account当中直接使用,抽象字段必须具体化。

到此,相信大家对"Scala trait的对象怎么使用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

对象 属性 方法 输出 内容 字段 特质 学习 工作 实用 更深 清楚 说不清 说不清楚 兴趣 又是 多个 实用性 实际 操作简单 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 苏州工程软件开发售后保障 关于网络安全的二年级的小报 服务器单条最大内存怎么查 php测试连接数据库连接 郧西智能软件开发案例 c 拦截器中操作数据库 数据库中有多少数据 网络安全检测装置横向隔离 恒一互联网科技有限公司地址 用英语请求别人数据库 无法解决的网络安全问题 安徽通讯软件开发服务五星服务 医院网络安全自查记录 网络安全技术的未来发展 拓扑技术在数据库技术中 小学网络安全小儿歌 咸阳市国家网络安全宣传周 eset 自定义服务器 腾讯回应服务器挂了ig 数据库建多关系表案例 服务器为什么不优化 说明本机房使用的网络技术 广东手机软件开发收费 php连接oracle数据库 网络安全涉及的范围 品质有保证的郑州软件开发 服务器怎么设置访问ip白名单 客户与服务器通信时间 江苏品牌网络技术费用是多少 git服务器怎么管理
0