Which operators always need the override keyword in EK9?
← Override Mechanics · Ref: Q1070
The operator ? ALWAYS needs override on any class. Every class inherits operator ? from its root type, so your definition always overrides it.
ALWAYS needs override:
override operator ? as pure every class inherits this
Needs override when parent defines it OR default operator generates it:
override operator $ as pure if parent has $ or default operator was used override operator == as pure if parent has == or default operator was used override operator <> as pure if parent has <> override operator <=> as pure if parent has <=> override operator #? as pure if parent has #?
Does NOT need override (no parent version exists):
operator $ as pure if no parent $ and no default operator operator #^ as pure promote — rarely inherited operator ++ / += / -= mutation operators operator :=: / :~: / :^: copy/merge/replace
Simple rule: if the compiler says E05120, add override. If it says E05110, remove override.
E05120 = override required (parent has this operator)
E05110 = override not valid (parent does NOT have this operator)
for E05120 fix. See Q1069 for mixing default operator with overrides.
Example
defines module qa.overridemechanics.overridealways defines class //operator ? ALWAYS needs override Account accountId as Integer: 0 default private Account() Account() -> accountId as Integer this.accountId :=: accountId override operator ? as pure <- rtn as Boolean: accountId? //operator $ does NOT need override here (no parent $) operator $ as pure <- rtn as String: `Account-${accountId}` defines program OverrideAlwaysDemo() stdout <- Stdout() acct <- Account(1001) stdout.println(`Set: ${acct?}`) stdout.println(`${acct}`)
Common mistakes
E05120 — operator ? always needs 'override' because every class inherits it from its base type.
Incorrect:
operator ? as pure <- rtn as Boolean: name?
Correct:
override operator ? as pure <- rtn as Boolean: accountId?
Other ways to ask this
- When do I need to write override before an operator?
- Does operator $ need override?
- List all operators that require override in EK9
Coming from another language?
Java: @Override is optional but recommended. EK9: override is mandatory — the compiler enforces it.
Keywords: E05120, always, operator, E05110, list, override, isSet