E07020: 'override' of a method/operator and 'abstract' (no implementation) is not logical

Category: E07xxx Full resolution · Reported in phase: SYMBOL_DEFINITION · Classification: OVERRIDE_AND_ABSTRACT · All error codes

What went wrong

You've marked a method as BOTH 'override' AND 'abstract'. These are mutually exclusive - 'override' means IMPLEMENTING, 'abstract' means NOT implementing.

Worked examples

Compilable examples demonstrating this error and the correct fix:

  • ek9 -q 768 (Why can't an abstract method have a body in EK9?)

How to fix it

  1. Choose ONE: either abstract OR override
  2. Abstract = defer implementation to subclass
  3. Override = provide implementation now

Common causes

  • Confusion about method intent
  • Copy/paste error from different context
  • Incomplete refactoring

See also

  • E07020: abstract with override (this error)
  • E07010: private with override
  • E07100: abstract with implementation body

Examples

Every example is compiled by the EK9 compiler: the first fails exactly as captioned, the others fix it.

Fails with E07020: 'override' of a method/operator and 'abstract' (no implementation) is not logical

#!ek9
defines module error.e07020.bad

  defines class

    Shape as abstract
      area() as abstract
        <- rtn as Float?

    Polygon extends Shape as abstract

      //override says "this implements it", abstract says "there is no implementation"
      override area() as abstract
        <- rtn as Float?

Fixed: Either implement it with override, or leave it abstract and do not redeclare it

#!ek9
defines module error.e07020.good

  defines class

    Shape as abstract
      area() as abstract
        <- rtn as Float?

    //Still abstract: it simply inherits area() and does not redeclare it
    Polygon extends Shape as abstract
      sides() as abstract
        <- rtn as Integer?

    //Concrete: it overrides area() with a body
    Square extends Polygon
      override area()
        <- rtn as Float: 4.0

      override sides()
        <- rtn as Integer: 4

Questions and answers

These Q&A entries show E07020 and its fix: