trait:
Serve as interfaces in Scala, can only have def inside, not val. 但不同于interface的是, trait可以含有具体实现供其他类extend时直接使用
trait implements:
class A extends B with C1 with C2...
when use
extends for trait, no
override needs to be written
when a class extends from multiple trait, if multiple traits have some methods that more than 1 of them overrides, the order of trait matters.
Functions can also be defined as trait or object like
trait Fun1[A, B] {
def apply(x : A):B
}
apply is the default method for the function
object:
object in Scala:
object XXX {} will build a natural singleton class. and the methods inside object will always be “static”. *good fit for utility functions’ residence.
How to implement static methods inside a normal class?
do:
class A {
//some methods
}
object A {
//some static methods
}
As long as 2 classes are in one file, they can access each other.
class:
Class in Scala:
default getters and setters, no need to override it unless needed:
def age = privateAge
def age_=(newValue: Int) {}
val elements will not have default setters as “val” cannot be changed
use
@BeanProperty to get Java style getXXX and setXX
Constructor:
primary constructor: directly shown in parameters after the class name
secondary constructor: called this. must refer primary one or other secondary constructors, secondary constructor will not be able to call super.