Просмотр полной версии : Проблема с наследованием свойств класса
Здравствуйте.Может быть я что то не понимаю, но у меня такая проблемма.У меня есть некий базовый класс.И есть некий расширяемый от него класс.Как мне передать значение переменной из базового класса в расширяемый класс?
package src {
public class A {
public var rrr:String;
public function A() {
rrr ="Hello world!";
}
}
}
И есть класс наследник
package src {
public class B extends A{
public function B() {
trace(rrr);
}
}
}
Вобщем мне надо чтобы из класса наследника В было видно значение переменной rrr класса A.Хэлп ми плиз....
super()???
А если быть точным, то как его применять.Чего то не получается(((
В коде ошибок нету. И так должно все работать.
super() неявно вызывается.
у меня есть файл scr.as
package {
public class scr {
public var rrr:String;
public function scr() {
rrr ="Hello world!";
}
}
}
и есть файл scr1.as
package {
public class scr1 extends scr{
public function scr1() {
trace(rrr);
}
}
}
выдает ошибку 5000: В класс "scr" должен входить подкласс "flash.display.MovieClip", так как он связывается с символом такого же типа в библиотеке.
Почему??????Объясните мне пожалуйста если в коде ошибок нет
Добавлено через 3 минуты
А на счет super() я так понял надо писать
trace(super(rrr))
Если я не прав, то поправьте меня потому что в хэлпе я примера не нашел.Только это
super([arg1, ..., argN])
super.method([arg1, ..., argN])
выдает ошибку 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, т.к. этот класс в вашей библиотеке экспортируется в качестве мувиклипа. (Кстати, названия классов принято писать с большой буквы.)
А на счет super() я так понял надо писать
trace(super(rrr))
super - это обращение к классу-предку, например, если у вашего базового класса конструктор принимает параметры - то надо в конструкторе подкласса вызвать super(аргументы конструктора базового класса)или если вы переопределили в своем классе метод, и нужно вызвать метод предка, то обращение к нему super.method() А super(rrr) выдаст ошибку, т.к. конструктор вашего базового класса не принимает аргументов.
вобщем если кому-то надо то я сделал
файл scr.as
package {
import flash.display.MovieClip;
public class scr extends MovieClip {
public var Str:String;
public function scr() {
Str ="Hello world!";
}
}
}
файл scr1.as
package {
public class scr1 extends scr{
public var newStr:String;
public function scr1() {
newStr = super.Str;
}
}
}
файл init.as самый главный
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);
это так к примеру
Здравствуйте.Может быть я что то не понимаю, но у меня такая проблемма.У меня есть некий базовый класс.И есть некий расширяемый от него класс.
Базовый класс можно расширять. Т.о. Ваш базовый класс является "расширяемым", а не его наследник в данном контексте. Тонкая разница, но как меняется смысл фразы. Здесь правильнее сказать "расширяющий".
PS Проблема всегда писалось с одной "м".
Вот еще в чем загвоздка.Подскажите пожалуйста почему вылезает ошибка?
Вот главный класс
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
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()
вот это происходит в Вашем коде : ......new scr() -> new init() -> new scr() -> new init()......
называется "бесконечная рекурсия"
И как же мне тогда взять эту переменную?делать события?Подскажите плиззз...
crazyone
04.03.2010, 12:57
Уберите из конструктора вашего базового класса вот эту строчку:
var ttt:scr = new scr();
И попробуйте вчитываться в ответы - это помогает.
Т.е. я не смогу создать экзэмпляр класса scr в классе init, потому что scr расширяет этот самый init?Так что ли?тогда как мне создать экзэмпляр класса scr чтобы в нем был доступ к переменной www?
GentleFLASH
04.03.2010, 15:33
Целая проблема прям...
package
{
import flash.display.MovieClip;
public class McInit extends MovieClip
{
public function McInit()
{
myString = "Hello world!";
}
public var myString:String;
}
}
package
{
import flash.display.MovieClip;
public class McScr extends McInit
{
public function McScr()
{
super();
trace("McScr.myString: " + this.myString);
}
}
}
Еще вопросы есть?
Есть. А где мне инициализировать класс McScr?Просто я хотел в классе инициализировать другой класс, а в этом другом классе нужно чтобы были доступны переменные класса из которого он инициализировался.Вот как то так.Не ругайтесь сильно, если я что - то не понимаю.Просто в учебниках я этого не нашел(((
Добавлено через 15 часов 19 минут
Помогите плиззз...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.