Search code examples
delphiabstractdelphi-2009

Abstract Class in Delphi


I am using a component suite which has many abstract classes. Now I want to apply polymorphism but I am getting Error Abstract Class when I create my object.

Should I override all methods which are virtual even if I don't need it? Are there any workaround or solution?


Solution

  • In order to make an instance of a class, you need to override all methods that are declared as virtual abstract. Even if you don't use them.

    If you really want a work around, you can use empty methods. But I won't recommend that.

    And to add some more information on the subject:

    A method is abstract if it is declared with virtual abstract:

    procedure MyMethod(const AMyParameter: Integer); virtual; abstract;
    

    Trivia: You can even override a method as abstract:

    procedure MyMethod(const AMyParameter: Integer); override; abstract;
    

    You need to override these methods in order to instantiate from that class.

    And you can declare an entire class as abstract:

    type
      TMyClass = class abstract (TMyAncestor)
      end;
    

    You get a warning if you try to instantiate that class.

    The counterpart is a sealed class:

    type
      TMyClass = class sealed (TMyAncestor)
      end;
    

    You get a warning if you try to inherit from that class.

    You can also seal methods, but you need the keyword final for that.

    procedure MyMethod(const AMyParameter: Integer); override; final;