Implement a Describable trait with a name method in a concrete Animal class.

← Sealed Types and Traits · Ref: Q1176

Implement a trait with 'with trait of' and override abstract methods:

  Dog with trait of Describable
    override describe()
      <- rtn as String: `Dog: ${name}`

Use 'override' on every abstract trait method. The trait can have a default method that the class inherits without overriding.

See Q106 for trait basics. See Q108 for implementing traits. See Q1129 for trait delegation.

Example

#!ek9
defines module qa.sealedtraits.traitwithclass

  defines trait

    Describable
      describe() as abstract
        <- rtn as String?

      summary() as pure
        <- rtn as String: "No summary available"

  defines class

    Dog with trait of Describable
      name <- String()

      Dog()
        -> name as String
        this.name: name

      override describe()
        <- rtn as String: `Dog: ${name}`

      override operator ? as pure
        <- rtn as Boolean: name?

      default operator

  defines program

    TraitWithClassDemo()
      stdout <- Stdout()

      dog <- Dog("Rex")
      stdout.println(dog.describe())
      stdout.println(dog.summary())
      stdout.println(`IsSet: ${dog?}`)

Common mistakes

E05120 — When implementing a trait's abstract method, the 'override' keyword is mandatory. Omitting it triggers E05120.

Incorrect:

      describe()
        <- rtn as String: `Dog: ${name}`

Correct:

      override describe()
        <- rtn as String: `Dog: ${name}`
Other ways to ask this
  • Write code to define a trait and implement it in a class with a constructor
  • I need a class that fulfils a Describable contract with name and describe methods
  • In Java I'd implement an interface on a class. Write the EK9 trait implementation
  • Given a Describable trait with describe(), create a Dog class that provides the implementation

Coming from another language?

Java: class Dog implements Describable. C#: class Dog : IDescribable. Python: class Dog(Describable). Kotlin: class Dog : Describable. EK9: Dog with trait of Describable, override methods.

Keywords: abstract, class, describe, implement, override, trait, with trait of