What happens if I claim 'override' but no parent method matches?
← Override Mechanics · Ref: Q572
Note: override applies to both methods and operators (e.g., override operator ? as pure, override operator $ as pure).
If you mark a method with 'override' but no parent class or trait has a matching method, the compiler reports E05110. This catches typos and stale overrides.
THE ERROR: E05110
E05110 fires when 'override' is used but no matching method exists in any parent. Common causes: method name typo, parent method was renamed or removed, wrong parent class.
FIX: REMOVE OVERRIDE
If this is a new method, remove the 'override' keyword. Before (error E05110):
override newMethod() <- rtn as String: "new"
After (correct):
newMethod()
<- rtn as String: "new"
FIX: CORRECT THE NAME
If you intended to override, fix the method name to match the parent. Before (typo, E05110):
override procss()
After (correct):
override process()
FIX: CHECK SIGNATURES
The override must match the parent signature exactly. Different parameter types mean no match.
SAFETY NET
E05110 is a safety net against stale code. When a parent method is renamed, all child overrides immediately break with E05110, forcing you to update them.
See Q570 for override basics. See Q571 for the opposite: missing override keyword. See Q573 for access modifier rules.
Example
defines module qa.override.falseclaim defines class Renderer as open render() as pure -> content as String <- rtn as String: content default operator ? //Correct: override matches parent method exactly HtmlRenderer extends Renderer override render() as pure -> content as String <- rtn as String: `<p>${content}</p>` //New method: no override keyword (no parent match) renderWithTag() as pure -> content as String tag as String <- rtn as String: `<${tag}>${content}</${tag}>` default operator ? defines program FalseOverrideClaimDemo() stdout <- Stdout() renderer <- HtmlRenderer() stdout.println(renderer.render("hello")) stdout.println(renderer.renderWithTag("hello", "div"))
Common mistakes
E05110 — Adding override to renderWithTag would be a false claim since Renderer has no method named renderWithTag. The compiler rejects override when no parent method matches. See ek9 -h E05110 for details.
Incorrect:
override renderWithTag() as pure
Correct:
renderWithTag() as pure
E05120 — Omitting override on the render method in HtmlRenderer would be detected as method shadowing since the parent Renderer already defines render. See ek9 -h E05120 for details.
Incorrect:
render() as pure
Correct:
override render() as pure
Other ways to ask this
- What is E05110 override inappropriate?
- Why does the compiler say my override has nothing to override?
- How do I fix a false override claim?
Coming from another language?
Java: @Override produces compile error if nothing to override. Kotlin: override keyword causes error if nothing matches. C#: override without matching virtual method is an error. EK9: E05110 when override has no matching parent method.
Keywords: inappropriate, open, false, mismatch, parent, override, inherit, function, E05110, claim, abstract, typo, virtual