Inheritance is one of the most fundamental ideas behind object-oriented programming. The basic idea is that a class inherits, or copies, all the fields from some class and then possibly expands the number of fields in the new data type. For example, suppose you created a data type point
that describes a point in the planar (two-dimensional) space. The class for this point
might look like the following:
type point: class var x:int32; y:int32; method distance; endclass;
Suppose you want to create a point
in 3D space rather than 2D space. You can easily build such a data type as follows:
type point3D: class inherits( point ) var z:int32; endclass;
The inherits
option on the class
declaration tells HLA to insert the fields of point
at the beginning of the class. In this case, point3D
inherits the fields of point
. HLA always places the inherited fields at the beginning of a class object. The reason for this will become clear a little later. If you have an instance of point3D
, which you call P3
, then the following 80x86 instructions are all legal:
mov( P3.x, eax ); add( P3.y, eax ); mov( eax, P3.z ); P3.distance();
Note that the p3.distance
method invocation in this example calls the point.distance
method. You do not have to write a separate distance
method for the point3D
class unless you really want to do so (see the next section for details). Just like the x
and y
fields, point3D
objects inherit point
's methods.