FreeBasic Override Keyword
last modified June 16, 2025
The FreeBasic Override
keyword enables polymorphism by allowing
a derived class to provide a specific implementation of a method that is
already defined in its base class. This is fundamental to object-oriented
programming in FreeBasic.
Basic Definition
In FreeBasic, Override
is used in method declarations within
derived classes to indicate that the method replaces an inherited virtual
method from the base class. The method signature must match exactly.
Method overriding enables runtime polymorphism, where the appropriate method version is called based on the actual object type rather than the reference type. This is a key feature of inheritance hierarchies.
Simple Override Example
This basic example demonstrates method overriding with the Override keyword.
Type Animal Declare Virtual Sub MakeSound() End Type Type Dog Extends Animal Declare Sub MakeSound() Override End Type Sub Animal.MakeSound() Print "Animal sound" End Sub Sub Dog.MakeSound() Print "Woof!" End Sub Dim As Animal Ptr a = New Dog a->MakeSound() Delete a
Here we define a base Animal class with a virtual MakeSound method. The Dog class overrides this method. When called through an Animal pointer, the Dog version executes due to polymorphism. The Override keyword makes this explicit.
Override with Parameters
Overridden methods can accept parameters just like their base versions.
Type Shape Declare Virtual Function Area(w As Integer, h As Integer) As Integer End Type Type Rectangle Extends Shape Declare Function Area(w As Integer, h As Integer) Override End Type Function Shape.Area(w As Integer, h As Integer) As Integer Return 0 End Function Function Rectangle.Area(w As Integer, h As Integer) As Integer Return w * h End Function Dim As Shape Ptr s = New Rectangle Print "Area: "; s->Area(4, 5) Delete s
The Rectangle class overrides the Area method from Shape with its own implementation. The parameters must match exactly. The Override keyword ensures we're properly overriding a base class method.
Multiple Level Override
Methods can be overridden at multiple levels in an inheritance hierarchy.
Type Vehicle Declare Virtual Sub Start() End Type Type Car Extends Vehicle Declare Sub Start() Override End Type Type ElectricCar Extends Car Declare Sub Start() Override End Type Sub Vehicle.Start() Print "Starting vehicle" End Sub Sub Car.Start() Print "Starting car engine" End Sub Sub ElectricCar.Start() Print "Starting electric motor" End Sub Dim As Vehicle Ptr v = New ElectricCar v->Start() Delete v
This shows a three-level inheritance hierarchy where Start is overridden twice. The ElectricCar version is called through a Vehicle pointer, demonstrating polymorphic behavior. Each override must be explicitly marked.
Override with Different Access
Overridden methods can have different access modifiers than their base versions.
Type Base Declare Virtual Protected Sub Method() End Type Type Derived Extends Base Declare Sub Method() Override End Type Sub Base.Method() Print "Base method" End Sub Sub Derived.Method() Print "Derived method" End Sub Dim As Derived d d.Method()
Here the base method is protected while the derived version is public. The Override keyword still applies as the method signatures match. Access modifiers don't affect overriding, only visibility.
Abstract Base with Override
Abstract methods must be overridden in concrete derived classes.
Type AbstractBase Declare Abstract Sub MustImplement() End Type Type Concrete Extends AbstractBase Declare Sub MustImplement() Override End Type Sub Concrete.MustImplement() Print "Implemented in concrete class" End Sub Dim As Concrete c c.MustImplement()
AbstractBase defines an abstract method that Concrete must implement. The Override keyword marks this as an implementation of the abstract method. This is mandatory for abstract methods, unlike regular virtual methods.
Override with Return Types
Overridden methods can have covariant return types in FreeBasic.
Type BaseType End Type Type DerivedType Extends BaseType End Type Type BaseClass Declare Virtual Function Create() As BaseType Ptr End Type Type DerivedClass Extends BaseClass Declare Function Create() As DerivedType Ptr Override End Type Function BaseClass.Create() As BaseType Ptr Return New BaseType End Function Function DerivedClass.Create() As DerivedType Ptr Return New DerivedType End Function Dim As BaseClass Ptr b = New DerivedClass Dim As BaseType Ptr obj = b->Create() Delete obj Delete b
This demonstrates covariant return types where the overridden method returns a more specific type. The DerivedClass's Create returns a DerivedType pointer while still satisfying the base method's contract. The Override keyword is still required.
Override vs Overload
This example contrasts overriding with overloading.
Type Base Declare Virtual Sub Process(x As Integer) Declare Sub Process(s As String) End Type Type Derived Extends Base Declare Sub Process(x As Integer) Override Declare Sub Process(s As String, y As Integer) End Type Sub Base.Process(x As Integer) Print "Base Process Integer: "; x End Sub Sub Base.Process(s As String) Print "Base Process String: "; s End Sub Sub Derived.Process(x As Integer) Print "Derived Process Integer: "; x End Sub Sub Derived.Process(s As String, y As Integer) Print "Derived Process String+Integer: "; s; y End Sub Dim As Derived d d.Process(10) d.Process("test") d.Process("test", 20)
Here Process(Integer) is overridden while Process(String) is inherited and Process(String,Integer) is overloaded. Only the first requires Override as it replaces a virtual method. Overloading adds new methods with different signatures.
Best Practices
- Explicit Override: Always use Override when intended to make code clearer.
- Signature Matching: Ensure parameter types and return types match exactly.
- Documentation: Document why a method is being overridden.
- Base Calls: Consider calling the base method when appropriate.
- Virtual Destructors: Make destructors virtual when using polymorphism.
This tutorial covered the FreeBasic Override
keyword with practical
examples showing its usage in different polymorphism scenarios.
Author
List all FreeBasic Tutorials.