trait的构造顺序: 首先调用超类构造器 特质构造器在超类构造器之后,类构造器之前执行 特质从左向右被构造 每个特质当中,父特质先被构造 如果多个特质共有一个父特质,而那个父特质已经被构造,则不会被再次构造 所有特质构造完毕,子类被构造 class Account { println("Account constructor") } trait Logged { println("Logged constructor") def log(msg: String){…
初始化trait的抽象字段: trait Logged { println("Logged constructor") def log(msg: String){ println("Logged")} } trait FileLogger extends Logged { var filename: String override def log(msg: String) { println("filename:" + filename) } }…
apply和unapply: apply方法经常用在伴生对象中,用来构造对象而不用显式地使用new. unapply是当做是伴生对象的apply方法的反向操作.apply方法接受构造参数,然后将他们变成对象.而unapply方法接受一个对象,然后从中提取值.unapply方法返回的是一个Option. object ScalaRunner { def main(args: Array[String]): Unit = { testApply2() testApplyUnApply() testC…
Scala包定义: 嵌套式: package a1 { class a1Class{ val age = 10 } package a2 { class PackageTest { def main(args: Array[String]): Unit = { println(new a1Class().age) } } } } 串联式: package com.citi.packageUtil 包对象: 包对象被编译成带有静态方法和字段的JVM类,名为package.class,位于相应的包下…
trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super.log依旧是个abstract class,所以必须在方法前加上abstract和override.但是并没有具体介绍如何使用,然后查阅了其他文档,才明白使用方法. 下面的代码定义了超类LoggerEmpty,这个定义意味着该特质只能混入扩展LoggerEmpty的类中. 在特质中声明抽象方法中有…
抽象类: Scala 抽象类中,抽象方法不需要使用abstract. 在子类中重写超类抽象方法时,不需要使用override. abstract class Person { def say(s: String): Unit } 抽象字段: 使用匿名类型定制抽象字段: 提前定义: class Creature { val range: Int = 10 val env: Array[Int] = new Array[Int] (range) } class Ant extends Creatur…
trait多继承: trait的继承并不像类拥有相同的含义!在下面这个例子中,如果还是运用类的继承的思想,那么运行结果将是什么也没有. trait Logged { def log(msg: String){ } } trait ConsoleLogger extends Logged { override def log(msg: String){ super.log(msg) } } 但是事实并非如此: trait Logged { def log(msg: String){ println…
apply方法是Scala中十分常见的方法,你可以把这种用法当做是()操作符的重载形式. 像以上这样伴生对象的apply方法是Scala中构建对象的常用手法,不再需要使用new. if 条件表达式的值就是跟在if或else之后的表达式的值,如果两者类型不同,选择各分支类型的公共超类型作为返回类型. if(x>1) 1 相当于 if(x>1) 1 else () 你可以把()当做是表示“无有用值”的占位符,将Unit当做Java的Void 如果你在写较长的语句,需要分行来写的话, 要确保第一行以…
trait 入门: trait类似于java的接口,不过比java接口功能更强大,可以有实体成员,抽象成员,实体方法,抽象方法. 如果需要混入的特质不止一个用with关键字. 带有特质的对象:(特质可以随时被混入对象中) trait Logged { def log(msg: String){} } trait ConsoleLogger extends Logged { override def log(msg: String){ println(msg) } } class SavingsA…
读取行: import scala.io.Source object FileReader { def main(args: Array[String]): Unit = { val source = Source.fromFile("F:\\scalaWorkspace\\ScalaLearning\\files\\test.txt", "UTF-8") val lineIterator = source.getLines() for (line <- li…