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

markII 03.03.2010 18:55

Проблема с наследованием свойств класса
 
Здравствуйте.Может быть я что то не понимаю, но у меня такая проблемма.У меня есть некий базовый класс.И есть некий расширяемый от него класс.Как мне передать значение переменной из базового класса в расширяемый класс?
Код AS3:

package src {
  public class A {
  public var rrr:String;
      public function A() {
          rrr ="Hello world!";
      }
  }
}

И есть класс наследник
Код AS3:

package src {
  public class B extends A{
 
      public function B() {
        trace(rrr);
      }
 
  }
}

Вобщем мне надо чтобы из класса наследника В было видно значение переменной rrr класса A.Хэлп ми плиз....

scarbo 03.03.2010 19:05

super()

markII 03.03.2010 19:09

super()???
А если быть точным, то как его применять.Чего то не получается(((

udaaff 03.03.2010 19:13

В коде ошибок нету. И так должно все работать.
super() неявно вызывается.

markII 03.03.2010 19:28

у меня есть файл scr.as
Код AS3:

package {
  public class scr  {
  public var rrr:String;
      public function scr() {
          rrr ="Hello world!";
      }
  }
}

и есть файл scr1.as
Код AS3:

package  {
 
  public class scr1 extends scr{
 
      public function scr1() {
        trace(rrr);
      }
 
  }
}

выдает ошибку
Код:

5000: В класс "scr" должен входить подкласс "flash.display.MovieClip", так как он связывается с символом такого же типа в библиотеке.
Почему??????Объясните мне пожалуйста если в коде ошибок нет

Добавлено через 3 минуты
А на счет super() я так понял надо писать
Код AS3:

trace(super(rrr))

Если я не прав, то поправьте меня потому что в хэлпе я примера не нашел.Только это
Код AS3:

 super([arg1, ..., argN])
super.method([arg1, ..., argN])


dixus 03.03.2010 19:45

Цитата:

Сообщение от markII (Сообщение 890668)
выдает ошибку
Код:

5000: В класс "scr" должен входить подкласс "flash.display.MovieClip", так как он связывается с символом такого же типа в библиотеке.
Почему??????Объясните мне пожалуйста если в коде ошибок нет

Это не очень хороший перевод описания ошибки, по-настоящему The class must subclass 'flash.display.MovieClip' since it is linked to a library symbol of that type. Т.е. scr должен наследоваться от MovieClip, т.к. этот класс в вашей библиотеке экспортируется в качестве мувиклипа. (Кстати, названия классов принято писать с большой буквы.)

Цитата:

Сообщение от markII (Сообщение 890668)
А на счет super() я так понял надо писать
Код AS3:

trace(super(rrr))


super - это обращение к классу-предку, например, если у вашего базового класса конструктор принимает параметры - то надо в конструкторе подкласса вызвать
Код AS3:

super(аргументы конструктора базового класса)

или если вы переопределили в своем классе метод, и нужно вызвать метод предка, то обращение к нему
Код AS3:

super.method()

А super(rrr) выдаст ошибку, т.к. конструктор вашего базового класса не принимает аргументов.

markII 03.03.2010 20:14

вобщем если кому-то надо то я сделал

файл scr.as
Код AS3:

package {
 
        import flash.display.MovieClip;
        public class scr extends MovieClip {
        public var Str:String;
    public function scr() {
          Str ="Hello world!";                 
      }
  }
}

файл scr1.as
Код AS3:

package  {
        public class scr1 extends scr{
                public var newStr:String;
        public function scr1() {
                newStr = super.Str;
              }
          }
}

файл init.as самый главный
Код AS3:

package {
 
        import flash.display.MovieClip;
 
        public class init extends MovieClip {
 
      public function init() {
                  var ttt:scr = new scr();
                  var rrr:scr1 = new scr1();
                  trace("22222"+ttt.Str);
                  trace("33333"+rrr.newStr);
 
      }
  }
}

Добавлено через 2 минуты
trace("22222"+ttt.Str);
trace("33333"+rrr.newStr);
это так к примеру

dimarik 03.03.2010 23:27

Цитата:

Сообщение от markII (Сообщение 890654)
Здравствуйте.Может быть я что то не понимаю, но у меня такая проблемма.У меня есть некий базовый класс.И есть некий расширяемый от него класс.

Базовый класс можно расширять. Т.о. Ваш базовый класс является "расширяемым", а не его наследник в данном контексте. Тонкая разница, но как меняется смысл фразы. Здесь правильнее сказать "расширяющий".
PS Проблема всегда писалось с одной "м".

markII 04.03.2010 11:59

Вот еще в чем загвоздка.Подскажите пожалуйста почему вылезает ошибка?
Вот главный класс
Код AS3:

package {
 
        import flash.display.MovieClip;
 
        public class init extends MovieClip {
                public var www:String;
                public function init() {
                          www = "Hello world!";       
                        var ttt:scr = new scr();
      }
  }
}

И в следующем классе scr мне надо взять переменную www класса init
Код AS3:

package {
        import flash.display.MovieClip;
        public class scr extends init {
        public function scr() {
          trace(super.www);         
      }
  }
}

Почему я из класса scr не могу взять переменую www?
Компилятор мне сообщает ошибку
Код:

Error: Error #2136: The SWF file file:///xxxxxxx.swf contains invalid data.
        at init$iinit()


Elser 04.03.2010 12:27

вот это происходит в Вашем коде : ......new scr() -> new init() -> new scr() -> new init()......
называется "бесконечная рекурсия"

markII 04.03.2010 12:48

И как же мне тогда взять эту переменную?делать события?Подскажите плиззз...

crazyone 04.03.2010 12:57

Уберите из конструктора вашего базового класса вот эту строчку:
Код AS3:

var ttt:scr = new scr();

И попробуйте вчитываться в ответы - это помогает.

markII 04.03.2010 13:25

Т.е. я не смогу создать экзэмпляр класса scr в классе init, потому что scr расширяет этот самый init?Так что ли?тогда как мне создать экзэмпляр класса scr чтобы в нем был доступ к переменной www?

GentleFLASH 04.03.2010 15:33

Целая проблема прям...

Код AS3:

package
{
        import flash.display.MovieClip;
 
        public class McInit extends MovieClip
        {
                public function McInit()
                {
                          myString = "Hello world!";       
                }
 
 
                public var myString:String;
        }
}

Код AS3:

package
{
        import flash.display.MovieClip;
 
        public class McScr extends McInit
        {
                public function McScr()
                {
                        super();
 
                        trace("McScr.myString: " + this.myString);         
                }
        }
}

Еще вопросы есть?

markII 10.03.2010 20:48

Есть. А где мне инициализировать класс McScr?Просто я хотел в классе инициализировать другой класс, а в этом другом классе нужно чтобы были доступны переменные класса из которого он инициализировался.Вот как то так.Не ругайтесь сильно, если я что - то не понимаю.Просто в учебниках я этого не нашел(((

Добавлено через 15 часов 19 минут
Помогите плиззз...


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

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