Difference between revisions of "Gambas/syntax/variables/classes/inheritance"

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
< Gambas‎ | syntax‎ | variables‎ | classes
Jump to navigation Jump to search
(another inheritance issue)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
==Notes==
 +
* To call the ancestor's version of a method, refer to the parent as "[http://gambaswiki.org/wiki/lang/super Super]".
 +
* If ClassB inherits from ClassA, and ObjectB is declared as ClassA, it will use ClassA's methods even if it receives an object of ClassB. To make use of virtual methods (in this case, methods in ClassB), declare ObjectB as a "Variant" instead of "ClassA".
 +
* If ClassB inherits methods from ClassA, and ObjectB is declared as ClassB, and ObjectB is asked to execute a method that is defined only in ClassA, and that method calls another method that is defined in both ClassA and ClassB, it will apparently call the ClassA method unless invoked as "Me.method". (This needs to be verified... because how would you then call a private method?)
 
==Documentation==
 
==Documentation==
{{gambasF1|1.0.13}}
+
To specify that your class should inherit from the <u>ParentClass</u> class, insert at the beginning of the class file:<gambas>INHERITS ParentClass</gambas>
To specify that your class should inherit from the <u>ParentClass</u> class, insert this at the beginning of the class file:
+
Note that if you are inheriting from a {{l/same|virtual}} class, you need to leave off the period (e.g. to inherit from '''.ListViewItem''', use "INHERITS ListViewItem").
INHERITS <u>ParentClass</u>
 
Note that if you are inheriting from a [[virtual class (Gambas)|virtual class]], you need to leave off the period (e.g. to inherit from '''.ListViewItem''', use "INHERITS ListViewItem").
 
 
===What is inherited?===
 
===What is inherited?===
 
The class inherits from its parent every method, property, constant and event.  
 
The class inherits from its parent every method, property, constant and event.  
Line 26: Line 28:
 
==Errors==
 
==Errors==
 
* "[[Bad use of virtual class (Gambas)|Bad use of virtual class]]"
 
* "[[Bad use of virtual class (Gambas)|Bad use of virtual class]]"
 +
==Acknowledgements==
 +
{{gambasF1|1.0.13}}

Latest revision as of 20:37, 16 May 2015

Notes

  • To call the ancestor's version of a method, refer to the parent as "Super".
  • If ClassB inherits from ClassA, and ObjectB is declared as ClassA, it will use ClassA's methods even if it receives an object of ClassB. To make use of virtual methods (in this case, methods in ClassB), declare ObjectB as a "Variant" instead of "ClassA".
  • If ClassB inherits methods from ClassA, and ObjectB is declared as ClassB, and ObjectB is asked to execute a method that is defined only in ClassA, and that method calls another method that is defined in both ClassA and ClassB, it will apparently call the ClassA method unless invoked as "Me.method". (This needs to be verified... because how would you then call a private method?)

Documentation

To specify that your class should inherit from the ParentClass class, insert at the beginning of the class file:<gambas>INHERITS ParentClass</gambas> Note that if you are inheriting from a virtual class, you need to leave off the period (e.g. to inherit from .ListViewItem, use "INHERITS ListViewItem").

What is inherited?

The class inherits from its parent every method, property, constant and event.

Which class can be a parent class?

You can inherit any class, even a native one!

For example, you can create a custom MyListBox class that inherits ListBox but allows association a tag with each list item.

Note that you can't use INHERITS in a form class file, because forms already inherits the Form class.

Inheritance and constructor

Unlike many (or most) object-oriented languages, in Gambas each class in the inheritance hierarchy consumes the parameters passed to the constructor.

Let's suppose we have the following inheritance tree:

  • MyListBox ---inherits--> ListBox ---inherits---> Control
    • Control._new() does not exist.
    • ListBox._new() takes one parameter: the parent control.
    • MyListBox._new() takes one parameter: a name - It is just an example.

So NEW MyListBox() will take two parameters. The first will be sent to MyListBox._new(), the second to ListBox._new(). But the ListBox._new() will be called first. This way, you are sure that the ListBox control exists when you are in MyListBox._new().

You then create a MyListBox control this way:

  • aMyListBox = NEW MyListBox ( "Name", aContainer )

Errors

Acknowledgements

This documentation was originally copied form the F1 Help ("help browser" contents) included with Gambas version 1.0.13, but may contain transcription errors and will probably be rewritten extensively over time. It may also not reflect later revisions of the Gambas documentation.