private 字段,生成 private 的 getter/setterval 字段,只生成 getterprivate[this] 字段,不生成 getter/setter@bean.BeanProperty 注解可生成符合 JavaBean 规范的 get/set 方法(加上默认的两个方法,共四个方法)this,只是参数不同private[this] val 字段self => 自身类型,区分调用的内部类和外部类的字段、方法等class 或多个 trait
Accounts.newUniqueNumber() 而不是 newUniqueNumber()apply 方法
Object(arg1, ..., argN), 返回伴生类的实例,如 Array(1,2,3)new 关键字,在嵌套表达式中很方便extends AppEnumeration 帮助类实现Enumeration.Value(ID, name) 内部类, ID 依次累加, 默认 0 开始;name 默认是字段名trait 中未实现的方法默认是抽象的 (abstract)trait,从最后一个开始调用
extends 关键字实现override 关键字trait 则对其他的 trait 使用 with 关键字trait 使用trait,从最后一个开始调用trait 的情况下,super.someMethod 会根据从右向左的顺序调用下一个 trait 的方法
trait存在抽象方法,则子trait需使用 abstract override 关键字,否则 super.someMethod 无法编译trait 也有构造器
trait从左向右,有父 trait 的先构造,共享的父 trait 只构造一次 > 子类trait 可继承类,混入该 trait 的类都是被继承类的子类,子类如果有继承其他的类也必须是被继承类的子类trait 不继承类,直接在 body 内定义 this: Type =>,则混入的类必须是该 Type 类型的/子类型的this: { def log(msg: String) } => ,则混入的类必须包含结构类型中定义的方法trait 最终会翻译成类和接口package 包名和文件路径并不一定对应java.lang, scala, Predef 始终默认会导入collection.mutable 实际是 scala.collection.mutablepackage a.b.c 与 package a { package b { package c {}}} 不同
package a 或 package b 中定义的资源可在带括号的包声明中访问,但 package a.b.c 无法访问private[package.name] 限制资源的可见性import
collection.mutableimport collection.mutable._selector
import java.awt.{Color, Font}import java.util.{HashMap => JavaMap}import java.util.{HashMap => _, _} // 避免产生混淆java.lang, scala 和 Predef
scala 路径
fragile base class基类被继承之后,修改基类可能会对子类造成无法预期的影响
extends 关键字
final 类不能被继承, final 字段、方法不能被覆盖override 关键字abstract 关键字;子类覆盖时也可以省略 overrideabstract 关键字,子类覆盖式也可省略 overridesuper 关键字isInstanceOf, asInstanceOf;获取类型, classOf
protected 不同于 Java,受保护成员在包内不可见def 只能覆盖 defval 只能覆盖 无参数的 defvar 只能覆盖 抽象的 var继承层级
Any 定义了 asInstanceOf, isInstanceOf,判断相等,hash值等方法AnyRef 是除基础类型外所有类的父类,等价于 java.lang.Object
wait, notify/notifyAll,synchronizedAnyVal 不包含任何方法,只是个值类型的标记ScalaObject 这个标记接口,该接口无任何方法Null 的唯一实例 null,可分配给引用类型,但不可分配给值类型(Int 不可为 null)Nothing 无实例,在泛型构造时有用,Nil 类型为 List[Nothing]??? 方法声明返回类型为 Nothing, 无返回值,会抛出 NotImplementedError,用于预留未实现的方法Unit 代表空/void,类型唯一值为 ()Any 或 AnyRef, 当传递多个参数时,会被替换为 tupleequals 和 hashCode 判断对象相等
equalsequals 参数类型为 Any 而不是具体的类型## 是 hashCode 的安全版本,遇到 null 会返回 0 而不是抛出异常AnyValequals 和 hashCode 比较实际值class a(x: Int, y: Int) 设计为 class a(x: X, y: Y) ,定义值类 X, Y 避免混淆参数原文:https://www.cnblogs.com/yuanzam/p/11610109.html