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