Здравствуйте! Бывают такие случаи, когда нужно при изменении или чтении переменной выполнять какие-либо действия. Ну, например, у меня есть переменная – тик таймера. Когда я изменяю значение это переменной мне нужно изменить и delay таймера. Каждый раз после изменения переменной прописывать изменение delay таймера не хорошо. Что же делать? - Для этого есть специальная фича:
private var timerDelay:Number = 100; private function set TimerDealy(value:Number){ timerDelay=value; //здесь я уже могу прописать и изменение delay таймера } private function get TimerDealy(){ return timerDelay; } TimerDealy=500;//будет вызываться функция set TimerDealy trace(TimerDealy);// будет вызываться функция get TimerDealy, выведет 500
Тут я думаю всё понятно. Так что переходим к override :)
Но для начала нам нужно понять, что такое наследование классов.
Допустим у нас есть класс A:
package{ import flash.display.Sprite; public class A extends Sprite{ public var foo:Number=20; public function A(){ } public function traceFoo(){ trace(foo); } } }
A extends Sprite – это и есть наследование. То есть у класса A будут доступны функции и переменные класса Sprite (x, y, z …). Мы сделаем то же самое, просто мы будем наследовать свой класс, чтобы было понятней.
Теперь напишем класс B, который будет наследовать класс A:
package{ public class B extends A{ public function B(){ } } }
Сразу видно, что в конструкторе ничего нет, но я говорил, что у наследника будут доступны функции предка. Проверим. Для этого напишем класс Main, который будет создавать экземпляры класса A и B и вызывать у них функцию traceFoo:
package { import flash.display.Sprite; public class Main extends Sprite{ public function Main() { var a:A=new A(); var b:B=new B(); a.traceFoo(); b.traceFoo(); } } }
Должно работать. А где же это может иметь практическое применение? – например, когда вам нужно создать кучу разных врагов, у них всех будет какая-то своя фича, но все они будут двигаться, стрелять, у каждого из них будет броня и жизни. Для этого как раз можно создать класс, у которого будут функции ходьбы, стрельбы, переменные жизни и брони. А потом просто наследовать этот класс.
Теперь переходим к override. Что это такое и для чего это нужно? Сразу объясню на прошлом примере. Допустим, у нас есть враг, который не будет стрелять, а будет ходить с мечом и бить, кого видит. Но отдельно для него вызывать функцию атаки мечом глупо. Для решения этой проблемы нам и понадобится override. Override просто переназначает функцию. Изменим немного наши классы, в классе A изменяем функцию traceFoo:
virtual public function traceFoo(){ trace(foo); }
Просто добавили слово virtual. Теперь в классе B дописываем функцию traceFoo:
override public function traceFoo(){ trace("у функций одинаковое название, но они выполняют разные действия"); }
Класс Main не трогаем, запускаем. Выведет в output :
20
у функций одинаковое название, но они выполняют разные действия
Ну, собственно и всё. Если не получилось – качайте пример. Удачи!)
Комментариев нет:
Отправить комментарий