Use a class and create it with the new-keyword. A trait is used to extend a class.Classes. A Game class has fields and methods. It has the current score. It has players. And it can take turns with a play method.With traits, and the trait keyword, we can extend features of our classes. A Game might be extended to adjust the rules. It might add features or options.First example. Here we introduce a Test class. On this class we find a method print(). This writes a greeting to the screen. We create a new instance of Test with the new-keyword.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Test { def print() = { // Print a greeting. println("Hello") } } object Main { def main(args: Array[String]): Unit = { // Create new instance of Test class. val t = new Test() t.print() } } |
Output:
1 2 3 | Hello |
Traits. A trait is used to extend a class. We can compose a class by adding those traits to its definition. This allows us to combine many capabilities in a class.
Here: We have a Page class, and an Image and Paragraphs traits. A trait is defined in a similar way as a class, but uses the trait keyword.
ComplexPage: This class is based on the Page class, but also adds the Image and Paragraphs traits. It contains all three methods.
Finally: We create a ComplexPage instance and call print, printImages and printParagraphs from the Page class and the two traits.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | class Page { def print() = { println("Page") } } trait Image { def printImages() = { // Print images. println("Images") } } trait Paragraphs { def printParagraphs() = { // Print paragraphs. println("Paragraphs") } } // Extend Page. // ... Add Image and Paragraphs traits. class ComplexPage extends Page with Image with Paragraphs { } object Main { def main(args: Array[String]): Unit = { // Create ComplexPage instance. // ... Use Page, Image, Paragraphs methods on it. val example = new ComplexPage() example.print() example.printImages() example.printParagraphs() } } |
Output:
1 2 3 4 5 | Page Images Paragraphs |
Source: