mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 09:41:36 +00:00
[scala/en] Add traits in objects chapter (#2760)
* [scala/en] Add traits in objects chapter * [scala/en] Traits: Describe traits keywords
This commit is contained in:
parent
362135e6bc
commit
84c3574918
@ -460,8 +460,52 @@ val otherGeorge = george.copy(phoneNumber = "9876")
|
|||||||
|
|
||||||
// And many others. Case classes also get pattern matching for free, see below.
|
// And many others. Case classes also get pattern matching for free, see below.
|
||||||
|
|
||||||
|
// Traits
|
||||||
|
// Similar to Java interfaces, traits define an object type and method
|
||||||
|
// signatures. Scala allows partial implementation of those methods.
|
||||||
|
// Constructor parameters are not allowed. Traits can inherit from other
|
||||||
|
// traits or classes without parameters.
|
||||||
|
|
||||||
// Traits coming soon!
|
trait Dog {
|
||||||
|
def breed: String
|
||||||
|
def color: String
|
||||||
|
def bark: Boolean = true
|
||||||
|
def bite: Boolean
|
||||||
|
}
|
||||||
|
class SaintBernard extends Dog {
|
||||||
|
val breed = "Saint Bernard"
|
||||||
|
val color = "brown"
|
||||||
|
def bite = false
|
||||||
|
}
|
||||||
|
|
||||||
|
scala> b
|
||||||
|
res0: SaintBernard = SaintBernard@3e57cd70
|
||||||
|
scala> b.breed
|
||||||
|
res1: String = Saint Bernard
|
||||||
|
scala> b.bark
|
||||||
|
res2: Boolean = true
|
||||||
|
scala> b.bite
|
||||||
|
res3: Boolean = false
|
||||||
|
|
||||||
|
// A trait can also be used as Mixin. The class "extends" the first trait,
|
||||||
|
// but the keyword "with" can add additional traits.
|
||||||
|
|
||||||
|
trait Bark {
|
||||||
|
def bark: String = "Woof"
|
||||||
|
}
|
||||||
|
trait Dog {
|
||||||
|
def breed: String
|
||||||
|
def color: String
|
||||||
|
}
|
||||||
|
class SaintBernard extends Dog with Bark {
|
||||||
|
val breed = "Saint Bernard"
|
||||||
|
val color = "brown"
|
||||||
|
}
|
||||||
|
|
||||||
|
scala> val b = new SaintBernard
|
||||||
|
b: SaintBernard = SaintBernard@7b69c6ba
|
||||||
|
scala> b.bark
|
||||||
|
res0: String = Woof
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
|
Loading…
Reference in New Issue
Block a user