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

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: class, abstract, with trait of, trait, implement, describe, override