Ссылка на оригинальную статью.
Метод — это функция или процедура, принадлежащая какому-то классу или объекту, которая определяет поведение программы, содержащимися в ней выражениями. Методы можно встретить в любом примере программы, даже в простом Hello World! используется метод main.
1 2 3 4 5 |
class Main { static public function main():Void { trace("Hello World"); } } |
Вот некоторые характеристики методов:
- Имя метода (в примере: main)
- Список аргументов (в примере: () )
- Возвращаемый тип(в примере: void )
- Может иметь модификации для доступа(в примере: static и public)
- Может иметь выражение внутри (в примере: {trace(«Hello World»).
Рассмотрим данный пример.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class Test { static function main() { var f = new Fraction(3, 3); trace(f.toString()); } } class Fraction { public var div:Int; public var den:Int; public function new(x, y) { this.div = x; this.den = y; } public function toString() : String { return 'Franction: $div/$den'; } } |
В данном примере есть метод toString() и конструктор, кроме main.
Методы могут принимать входные параметры, которые указывают в скобках. Обычно указывают тип параметров, однако иногда этого можно не делать, тогда задача определения типа отходит компилятору, который определяет его при вызове метода.
Тип возвращаемого значения записывается после его объявления через двойные скобки. В нашем случае метод возвращает значение типа String.
У нас все методы классов Franction публичные, что значит, мы можем обращаться к ним из класса Test.
Методы и поля могут переопределены для наследников базового класса. Использование переопределения в классе подразумевает, что у него есть родительский класс. Добавим в наш пример еще один класс — наследник Decimal и переопределим метод базового класса toString().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
class Test { static function main() { var f = new Fraction(3, 3); trace(f.toString()); var d:Fraction = new Decimal(5, 10); trace(d.toString()); } } class Fraction { public var div:Int; public var den:Int; public function new(x, y) { this.div = x; this.den = y; } public function toString() : String { return 'Franction: $div/$den'; } } class Decimal extends Fraction { public function new(x, y) { super(x, y); } override public function toString() { var d:Float = div/den; return 'Deimal: $d'; } } |
Переменная d явно определена как Fraction и во время компиляции «узнается» как переменная этого класса, но во время выполнения все равно находится правильный метод toString() в классе Decimal .
Наследник может обратиться к методам родителя, которые он переопределяет с помощью вызова super.methodName(). Это используется, например, в конструкторе наследника.
Ссылка на пример на TryHaxe!