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?
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).
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.
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;
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.
Your descendant class is still abstract if
abstract
, orIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With