2.3.2 Наследование

Source: 2.3.2 Inheritance
Как во многих объектно-ориентированных языках, классы в языке Haxe являются основной структурой данных для большинства программ. Класс объявляется с помощью ключевого слова class . В классе может быть ноль или более полей класса. Пример класса Ogr, который представляет собой создание экземпляра класса Ogr, с полем life типа Int:

Экземпляр класса создается с помощью ключевого слова new:

Здесь метод toString() отображает представление экземпляра класса Ogr.

В Haxe классы могут наследовать от других классов, это осуществляется с помощью использования ключевого слова extends:

Так любой экземпляр класса Warrior также является экземпляром класса Ogr. В этом случае Ogr называется родительским классом для класса Warrior, а Warrior является дочерним классом для класса Ogr. У одного родительского класса может быть много дочерних классов, но у дочернего есть только один родительский класс. Определение «родительский класс класса X» обычно относится к его прямому родительскому классу, родительскому классу его родительского класса и т. д.

Вышеприведенный код класса Warrior очень похож на исходный код родительского класса Ogr, но в нем появляются две новые конструкции:

  • extends Ogr обозначает, что этот класс наследует класс Ogr
  • super (x, y) — вызывает конструктор родительского класса, в данном случае Ogr.new
  • override переопределяет метод toString()  родительского класса   Ogr

Для дочерних классов не обязательно определять собственные конструкторы, но если они есть, вызов super () является обязательным. В отличие от некоторых других объектно-ориентированных языков, этот вызов может появляться в любом месте кода конструктора и не обязательно должен быть первым выражением.

Создается экземпляр класса Warrior таким образом:

Где видно, что когда класс наследует другой класс он становится подтипом родительского класса, т.е. каждый экземпляр Warrior также является и экземпляром типа Ogr.

Подробнее про эффекты и ограничения переопределяющих методов можно прочитать в Overriding Methodsе.