Форум 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=111796)

Crazy Driver 08.05.2008 14:11

Как побороть отсутствие перегруженных методов?
 
Есть класс родитель и класс наследник.
Необходимо сделать разныеконструкторы у этих классов. Как это можно сделать в ActionScript?

Пример:
Код:

public class ParentClass{
 public function ParentClass(params_for_parent){
  code_for_parent;
 }
}

public class ChildClass extends ParentClass{
 public function ParentClass(params_for_child){
  code_for_child;
 }
}

На такой код флекс ругается: 1203: No default constructor found in base class
А как этот default constructor сделать если перегрузки методов нет?
Либо как сделать в дочернем класе так, чтобы небыло необходимости вызывать super()?

etc 08.05.2008 14:34

Код:

if (false) super();

Crazy Driver 08.05.2008 14:40

Код:

if (false) super();
Такое не прокатило: таже ошибка.
А вот так всё получилось:
Код:

if (1>2) super();
Спасибо, __etc!

Crazy Driver 08.05.2008 14:56

Решение конечно действенное, но выглядит, мягко говоря, странно.
Что это, баг флекса? Или в других IDE флеша тоже самое?

etc 08.05.2008 15:14

Конструктор суперкласса всегда вызывается, если его вызов не указан.

Crazy Driver 08.05.2008 16:35

Цитата:

Сообщение от __etc (Сообщение 737953)
Конструктор суперкласса всегда вызывается, если его вызов не указан.

Да, но в данном случае вызывается пустой конструктор (без параметров и без тела), которого нет в супер классе. Причём я непонимаю почему такую возможность не сделали "легальной" и использовать её нужно в такой вот извращённой форме.

BlooDHounD 08.05.2008 21:09

потому что инициализация класса, на то и инициализация, что бы требовать аргументов. если они нужны для инициализации, значит они нужны для не родимой, и объект без них будет создан неправильно. чё не понятного? это же как 2х2. если требуют - значит надо.

Crazy Driver 08.05.2008 22:51

Цитата:

Сообщение от BlooDHounD (Сообщение 738044)
потому что инициализация класса, на то и инициализация, что бы требовать аргументов. если они нужны для инициализации, значит они нужны для не родимой, и объект без них будет создан неправильно. чё не понятного? это же как 2х2. если требуют - значит надо.

Ну надо или не надо и правильно ли создастся объект, наверно всётаки решать программисту.
У меня от одного класса наследуются 4 других, у которых практически одинаковая инициализация, которая и описана в конструкторе суперкласса. А один дочерний класс не нуждается в такой инициализации.
В других языках (таких как Java, C++ и т.п.) подобная задача решается очень просто с помощью перегрузки конструктора, т.е. 2 конструктора у супер класса, принимают разное количество параметров.
Здесь же, раз нет возможности перегрузить конструктор, хотелось бы хотя бы переопределить его - вот это как 2х2. А то, что это сделать можно только через условие (1>2) или что-нибудь в этом духе - это вообще бред (не в одном другом языке подобных извращений не встречал).


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

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