Несмотря на то, что в scala есть структурные типы, я не думаю, что вы можете сделать это для любого типа, у которого есть метод greet, но для метода greet в определенной характеристике или классе.
Тогда, если вы хотите, чтобы ваша подпрограмма изменила еще не определенную подпрограмму, вызывая ее с помощью super, она должна быть помечена abstract overrid
e, а не просто переопределить.
Это было бы
trait Greeter { def greet }
trait First extends Greeter {
abstract override def greet = {
super.greet
println("Hi, I'm first")
}
}
Тогда вы можете иметь приветствие
class StandardGreeter(greeting: String) extends Greeter {
def greet = println(greeting)
}
Обратите внимание, что First был определен без знания StandardGreeter. Вы смешиваете в новых классах с
class FirstGreeter(greeting: String) extends StandardGreeter(greeting) with First
или создайте экземпляры напрямую с помощью
new StandardGreeter("whatever") with First
Вы можете прочитать эту статью .