2012-04-04 3 views
1

я определяю эту функцию в одном из моих классов:Переопределение функции из другого класса

public function onUse():void {}; 

Тогда в другой из моих классов (давайте назовем его «class2»), я создаю объект этого класса, и затем необходимо переопределить эту функцию другим. После некоторого Google-фу, я нашел это, и использовал его ...

button.onUse { 
    variable = value; 
} 

... но он выполняет мгновенно, а не тогда, когда onUse() называется - который, кажется, пустая функция, всегда ,

Я не нашел ничего более того - я пробовал несколько вещей сам, например, указывая функцию внутри класса2 и используя button.onUse = function();, но он всегда вызывает ошибки.

Может ли кто-нибудь сказать мне, действительно ли то, что я пытаюсь сделать, и если да, то как я могу это сделать?

+0

Это действительно базовое объектно-ориентированное программирование.Все в порядке, мы все должны что-то начать. Я предлагаю вам записать себя на эту тему, чтобы вы могли начать на твердой почве. У меня, однако, нет хорошей ссылки для начала, но я уверен, что у хорошего самаритянина есть действительно хорошие друзья. – Exort

ответ

3

Вы можете только переопределить функции, когда вы расширяете класс:

public class A { 
    public function foo():void { 
     doStuff(); 
    } 
} 

public class B extends A { 
    override public function foo():void { 
     doOtherStuff(); 
    } 
} 

var n:A = new A(); 
n.foo(); // => calls doStuff(); 

var o:B = new B(); 
o.foo(); // => calls doOtherStuff(); 

Таким образом, назначая различные функции метода класса экземпляра не возможно во время выполнения.

Вы можете, однако, оставить свой первоначальный класс в поле типа Function, а затем просто назначьте ему другое закрытие.

public class A { 
    public var foo:Function; 
} 

var n:A = new A(); 
n.foo = function():void { 
    doStuff(); 
}; 
n.foo(); // => calls doStuff(); 

var o:A = new A(); 
o.foo = function():void { 
    doOtherStuff(); 
} 
o.foo(); // => calls doOtherStuff(); 
+0

Это то, что мне нужно - спасибо! – Suyooo

0

проверить синтаксис

button.onUse { 
    variable = value; 
} 

функция будет определяться как

публичной функция onUse(): пустота {};

и переписывается с

override public function onUse():void { 
} 

в другом классе

так, как вы пытаетесь сделать это, не является переопределение функции.

Что я сделал в подобных обстоятельствах создать функцию onClickFunction в классе

public var onClickFunction:Function = null; 

, а затем в функции CLICK слушателя событий добавляет

if(onClickFunction != null){ 
    onClickFunction(); 
} 

, то вы можете назначить трехпозиционный нажмите здесь, чтобы сделать что-то вроде этого

button.onClickFunction = function(): void { variable = value; // dostuff }

Это не лучший способ сделать это, но, вероятно, самый простой способ реализовать функциональность. И в идеале вы бы использовали наследование так, как предлагал космический аппарат.