Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 993
marcostT Avatar asked May 31 '11 11:05

marcostT


People also ask

What is an abstract class in java?

Abstract class: is a restricted class that cannot be used to create objects (to access it, it must be inherited from another class). Abstract method: can only be used in an abstract class, and it does not have a body. The body is provided by the subclass (inherited from).

What is abstract class in Scala?

In Scala, an abstract class is constructed using the abstract keyword. It contains both abstract and non-abstract methods and cannot support multiple inheritances. A class can extend only one abstract class.


3 Answers

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;
like image 92
Toon Krijthe Avatar answered Sep 20 '22 08:09

Toon Krijthe


Delphi doesn't have abstract classes as such, only abstract methods. You will get an abstract method exception raised if you call an abstract method.

Put simply you must not call abstract methods. The compiler emits a warming if it detects you instantiating a class with abstract methods. Good practise is to ask the compiler to turn these warnings into errors.

like image 45
David Heffernan Avatar answered Sep 21 '22 08:09

David Heffernan


Your descendant class is still abstract if

  1. it's declared abstract, or
  2. it has at least one method declared abstract, or
  3. it doesn't override and implement all abstract methods from its ancestors
like image 28
Ondrej Kelle Avatar answered Sep 22 '22 08:09

Ondrej Kelle