Scala 面向接口编程
2024-09-28 11:44:52
1.如果要实现一个接口,前边没有extends关键字就可以使用extends,如果有要使用with关键字
2.Scala 中的接口支持多种继承,类或者抽象类不支持多种继承
3.抽象属性:未被实例化的属性
定义一个抽象的属性: val name : String,在实现的子类中直接进行赋值。
4.处理类可以混入接口外,Scala类的实例的对象也可以混入接口,以扩展当前对象实例的功能
package com.dtspark.scala.basics trait Logger{
def log(message: String){
println("Logger: " + message)
}
} class Loggin(val name: String) extends Logger{
def loggin{
println("Hi, welcome ! " + name)
log(name)
}
} trait RichLogger extends Logger{
override def log(message: String){
println("RichLogger: " + message)
}
} object HelloTrait {
def main(args: Array[String]): Unit = {
new Loggin("DTSpark").loggin //Hi, welcome ! DTSpark
//Logger: DTSpark val personLoggin = new Loggin("DTSpark") with RichLogger //混入,好处:类有一个默认的实现,随时可以扩展第三方实现
personLoggin.loggin //Hi, welcome ! DTSpark
//RichLogger: DTSpark
}
}
6.当继承有多个trait时,多个trait中有同一个方法时,调用的顺序是从由往左,形成一个调用链条。
7.
//********* trait 中一部分是抽象的,一部分是具体的; 如下是 工厂方法 设计模式
trait Information{
def getInformation: String //抽象的
def checkIn: Boolean = {
getInformation.equals("Spark")
}
} class Passenger(val name: String) extends Information{
def getInformation = name;
}
//*************
最新文章
- HTML标签-【fieldset】-fieldset
- thinkphp nginx php-fpm url rewrite 导致 404 错误
- 选择排序-java
- Java 报表之JFreeChart(第二讲)
- C# winForm 窗体闪烁问题
- Kmp 算法模板 C
- Java 异常 —— java.io.InvalidClassException: javax.xml.namespace.QName; local class incompatible
- 64 位系统遇到未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0
- baseDao 使用spring3+hibernate3方式
- 关于在Android设置全局变量随时获取context
- Java集合类之LinkedList链表
- UNIX线程之间的关系
- boost::thread boost库线程
- HDU-------An Easy Task
- redis持久化探究
- 解读python中SocketServer源码
- webpack 基本打包方法
- 定位 position 透明度 opacity
- python 的基础 学习 第一天
- ASP.NET Web API上实现 Web Socket - 转
热门文章
- asp.net IRequiresSessionState
- 用js来实现那些数据结构 第二章
- JAVA 判断对象内容是否含有空值
- lvds(800*600)
- MySQL-5.7权限详解
- Shell编程之for和select循环
- [POI2009]Slw
- awk中使用shell变量
- sqlserver 实时同步(发布订阅)
- Nuxt / Vue.js in TypeScript: Object literal may only specify known properties, but 'components' does not exist in type 'VueClass'