Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Задать в супер класе конструктор для расширяющего его класса (http://www.flasher.ru/forum/showthread.php?t=173358)

Tails 30.12.2011 13:54

Задать в супер класе конструктор для расширяющего его класса
 
Задать в супер класе конструктор для расширяющего его класа. Можно ли ?

Задумка такая, что есть класс управляющий поведением различных кнопок.
И есть разные кнопки, которые расширяют этот класс.
Когда я создаю кнопку, я хочу передать некий параметр в её конструктор:
Код AS3:

new краснаяКнопка(15);

Но не хочу описывать этот самый конструктор в её "красноКнопочном" класе, и всех ей подобных, а сделать это 1 раз в супер класе.

in4core 30.12.2011 14:21

Код AS3:

knob constructor /
public function RedKnob(i:int) {
super(i)
}
где в суперклассе общая реализация для всех кнопок. тоесть
 
super class constructor
public function SuperClass(i:int) {
this.i = i;
i = i + 100;
i--
funcBy(i)... and so on


HardCoder 30.12.2011 14:26

Я думаю, товарищ спрашивал о том - как НЕ писать в конструкторе вот это:
Код AS3:

public function RedKnob(i:int) {
super(i)
}

А чтобы суперкласс сам запускал конструктор наследника и принимал в себя его параметры. Правда не пойму, неужели так сложно прописать 2 строчки? Я при создании нового класса в FlashDevelop ставлю галку на "Generate constructor matching base class" и получаю класс с готовым кодом:
Код AS3:

public function RedKnob(i:int) {
super(i)
}

И ничего писать не надо

artcraft 30.12.2011 14:26

странный вопрос
при наследовании наследник получает все свойства и методы (в том числе конструктор) наследуемого класса и может их расширить или изменить ( в том числе конструктор), но наследуемый клас ничего не знает о наследнике

Tails 30.12.2011 14:34

Спасибо всем ответевшим, да я не хотел писать:
Код AS3:

public function RedKnob(i:int) {
super(i)
}

Потому, что для этого придёться создать отдельный .as фаил. Только из-за этого.

Видимо так и так придёться писать в две строки:
Код AS3:

var bt = new краснаяКнопка();
bt.i = 15;// или метод


HardCoder 30.12.2011 14:48

Цитата:

Сообщение от Tails (Сообщение 1054417)
Видимо так и так придёться писать в две строки:
Код AS3:

var bt = new краснаяКнопка();
bt.i = 15;// или метод


И по вашему - это удобнее? А если кнопка создается 50 раз, и имеет не один параметр а несколько? Будете 50 раз писать?:
Код AS3:

var bt1 = new краснаяКнопка();
bt1.i = 15;
bt1.a = true;
bt1.b = "someValue";
............................................
var bti = new краснаяКнопка();
bti.i = 15;
bti.a = true;
bti.b = "someValue";


Tails 30.12.2011 14:57

HardCoder
Код AS3:

var bti = new краснаяКнопка();
bti.metod(15,true,'someValue');// не по фуншую

А метод уже можно в супер класе описать.

Просто я хотел, чтоб было бы в одну строку:
Код AS3:

var bti = new краснаяКнопка(15,true,'someValue');// по фуншую

Без залезания в клас красной копки

HardCoder 30.12.2011 15:00

Так, стоп! Что-то у меня лыжи перестали ехать. Допустим ваша кнопка унаследована от SuperButton конструктор которого принимает в себя параметры:
Код AS3:

public function SuperButton (i:int = 10, changeable:Boolean = false, someVar:String = "tralala")

Значит при создании его наследника вам не надо создавать ас файл. Достаточно лишь написать:
Код AS3:

var bt1:краснаяКнопка = new краснаяКнопка(28, true, "someValue");

И если работаете во флеше - она сама во время компиляции создаст класс "краснаяКнопка"

-De- 30.12.2011 15:05

Сделайте фабричный метод, который у себя там сделает new, вызовет кучу инитов и вообще соберёт какую надо кнопку. Будет в одну строку. Такое часто делают)

Tails 30.12.2011 15:16

HardCoder
Не так не получиться.


Часовой пояс GMT +4, время: 04:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.