You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
println(d.loudMessage) // I'M AN INSTANCE OF CLASS B
28
33
```
29
-
У класса `D` есть суперкласс `B` и примесь `C`. Классы могут иметь только один суперкласс, но много примесей (используя ключевыое слово `extends` и `with` соответственно). Примеси и суперкласс могут иметь один и тот же супертип.
34
+
35
+
У класса `D` есть суперкласс `B` и трейт `C`.
36
+
Классы могут иметь только один суперкласс, но много трейтов (используя ключевое слово `extends` и `with` соответственно).
37
+
Трейты и суперкласс могут иметь один и тот же супертип.
38
+
39
+
{% endtab %}
40
+
41
+
{% tab 'Scala 3' for=mixin-first-exemple %}
42
+
43
+
```scala
44
+
abstractclassA:
45
+
valmessage:String
46
+
classBextendsA:
47
+
valmessage="I'm an instance of class B"
48
+
traitCextendsA:
49
+
defloudMessage= message.toUpperCase()
50
+
classDextendsB, C
51
+
52
+
vald=D()
53
+
println(d.message) // I'm an instance of class B
54
+
println(d.loudMessage) // I'M AN INSTANCE OF CLASS B
55
+
```
56
+
57
+
У класса `D` есть суперкласс `B` и трейт `C`.
58
+
Классы могут иметь только один суперкласс, но много трейтов
59
+
(используя ключевое слово `extends` и разделитель `,` соответственно).
60
+
Трейты и суперкласс могут иметь один и тот же супертип.
61
+
62
+
{% endtab %}
63
+
64
+
{% endtabs %}
30
65
31
66
Теперь давайте рассмотрим более интересный пример, начиная с абстрактного класса:
У этого трейта реализован метод `foreach` который постоянно вызывает переданную ему функцию `f: T => Unit` на каждом новом элементе (`next()`) до тех пор пока в итераторе содержатся элементы (`while (hasNext)`). Поскольку `RichIterator` это трейт, ему не нужно реализовывать членов абстрактного класса `AbsIterator`.
66
148
67
-
Мы бы хотели объединить функциональность `StringIterator` и `RichIterator` в один класс.
149
+
У этого трейта реализован метод `foreach`, который постоянно вызывает переданную ему функцию `f: T => Unit`
150
+
на каждом новом элементе (`next()`) до тех пор пока в итераторе содержатся элементы (`while (hasNext)`).
151
+
Поскольку `RichIterator` - это трейт, ему не нужно реализовывать элементы абстрактного класса `AbsIterator`.
0 commit comments