The difference between two class compiler keywords "NoExtent" and "Abstract"

The definitions of these two compiler keywords looks very similar to me.

Is there any difference between these two keywords ?

When I declare a parent class as Abstract, its child class could be compiled successfully.

However, when I  declare a parent class as NoExtent, some compile errors about storage references get pop up for its child classes.


  • 0
  • 0
  • 142
  • 0
  • 1


Abstract class can have Storage definition, which will be the same for properties defined in abstract class for all children.

Class marked with NoExtent flag does not have own storage definition and all children should have complete storage definition. And data in all those children will be stored separately.