Classes may inherit from other classes; this is denoted by the extends
keyword:
class Point3 extends Point { var z:Int; public function new(x, y, z) { super(x, y); this.z = z; } }
This relation is often described as "is-a": any instance of class Point3
is also an instance of Point
. Point
is then known as the parent class of Point3
, which is a child class of Point
. A class may have many child classes, but only one parent class. The term "a parent class of class X" usually refers to its direct parent class, the parent class of its parent class and so on.
The code above is very similar to the original Point
class, with two new constructs being shown:
extends Point
denotes that this class inherits from class Point
super(x, y)
is the call to the constructor of the parent class, in this case, Point.new
It is not necessary for child classes to define their own constructors, but if they do, a call to super()
is mandatory. Unlike some other object-oriented languages, this call can appear anywhere in the constructor code and does not have to be the first expression.
A class may override methods of its parent class, which requires the explicit override
keyword. The effects and restrictions of this are detailed in Overriding Methods.
Classes can be declared with the keyword final
to prevent them from being extended.
Trivia:
:final
metadataPrior to Haxe 4, marking classes as final was possible using the
:final
metadata.