I get E05120 saying override is required on my operator ?. How do I fix it?
← Override Mechanics · Ref: Q1068
Every EK9 class inherits a default operator ? from its base type. When you define your own operator ?, you are OVERRIDING the inherited one. The compiler requires the 'override' keyword to make this explicit.
BEFORE (E05120 error):
operator ? as pure <- rtn as Boolean: name? and age?
AFTER (fixed):
override operator ? as pure <- rtn as Boolean: name? and age?
The same applies when using 'default operator' alongside a manual operator ?. If you write both, the manual one overrides the default:
default operator override operator ? as pure <- rtn as Boolean: name? and age?
The 'override' keyword is required on any operator that already exists in the parent type. For operator ?, this is always required because every type inherits it.
Operators that typically need 'override':
override operator ? isSet (always inherited) override operator $ string (if parent defines it or default operator was used) override operator == equality (if parent defines it)
See Q574 for override mechanics. See Q877 for the ? operator. See Q1055 for default vs manual operators.
Example
defines module qa.overridemechanics.fixe05120 defines class Person personName as String: String() age as Integer: 0 default private Person() Person() -> personName as String age as Integer this.personName :=: personName this.age :=: age //CORRECT: override is required because ? is inherited override operator ? as pure <- rtn as Boolean: personName? and age? operator $ as pure <- rtn as String: `${personName} (${age})` defines program OverrideDemo() stdout <- Stdout() person <- Person("Alice", 30) stdout.println(`Is set: ${person?}`) stdout.println(`${person}`)
Common mistakes
E05120 — Add 'override' before 'operator ?'. Every class inherits operator ? from its base type, so your definition overrides it.
Incorrect:
operator ? as pure <- rtn as Boolean: name? and age?
Correct:
override operator ? as pure <- rtn as Boolean: personName? and age?
Other ways to ask this
- The compiler says override required on operator ? in my class
- Fix E05120: override required on isSet operator
- Why do I need override on operator ? when I defined it myself?
Coming from another language?
Java: @Override annotation (optional but recommended). EK9: override keyword (mandatory). The compiler enforces it — no optional about it.
Keywords: class, E05120, operator, required, override, fix, isSet