Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   как вызвать сеттер суперкласса? (http://www.flasher.ru/forum/showthread.php?t=94772)

whiteRed 19.04.2007 15:49

Код:

var q1:First = new First(45);
var q2:Second = new Second(54);

насколько я понял, проблема в этих строчках! нужно явно определять класс переменной, тогда все работает.

whiteRed 19.04.2007 15:51

Цитата:

Сообщение от wvxvw
просто super() не принимает никаких параметров, если я ничего не путаю.

супер принимает те же параметры, что и конструктор суперкласса. но проблема не в нем

etc 19.04.2007 15:54

Так, либо я не понял, либо работает:

Код:

/**
 * @author Denis Kolyako
 */
class TestClass {
        private var $num:Number;
        public function TestClass() {
                this.$num = 10;
        }
       
        public function set num(value:Number):Void {
                this.$num = value;       
        }
       
        public function get num():Number {
                return $num;       
        }
}

Код:

/**
 * @author Denis Kolyako
 */
class ExtendedTestClass extends TestClass {
        public function ExtendedTestClass() {
                super();
        }
        public function set num(value:Number):Void {
                super.num = value;
        }
        public function get num():Number {
                return super.num;       
        }
}

Код:

a = new ExtendedTestClass();
trace(a.num); // 10
a.num = 2;
trace(a.num); // 2


whiteRed 19.04.2007 15:58

вот, применительно к классам из первого поста:

Код:

var q1:First = new First(11);
var q2:Second = new Second(22);
trace(q1.num);//11
trace(q2.num);//22



var arr:Array = new Array();
arr.push(new First(11));
arr.push(new Second(22));

trace(arr[0].num);//11
trace(arr[1].num);//undefined


wvxvw 19.04.2007 15:59

Цитата:

Сообщение от whiteRed
супер принимает те же параметры, что и конструктор суперкласса. но проблема не в нем

аха, но тебе ничего передавать ему не нужно.

----------------------- upd -----------------------
Код:

var _l1:First = new First(10);
var _l2:Second = new Second(20);
trace(_l1.__n); // 10
trace(_l2.__n); // 20
var __arr:Array = [];
__arr.push(new First(15));
__arr.push(new Second(25));
trace(__arr[0].__n); // 15
trace(__arr[1].__n); // 25

У меня все работает и с закомментированными сет\гет во втором классе и нет

iNils 19.04.2007 16:02

Я так и не понял. Что в итоге должно получится (вне класса)?

etc 19.04.2007 16:03

А у меня работает:

Код:

/**
 * @author Denis Kolyako
 */
class TestClass {
        private var $num:Number;
        public function TestClass(n:Number) {
                this.num = n;
        }
       
        public function set num(value:Number):Void {
                this.$num = value;       
        }
       
        public function get num():Number {
                return $num;       
        }
}

Код:

/**
 * @author Denis Kolyako
 */
class ExtendedTestClass extends TestClass {
        public function ExtendedTestClass(n:Number) {
                super(n);
        }
        public function set num(value:Number):Void {
                super.num = value;
        }
        public function get num():Number {
                return super.num;       
        }
}

Код:

a = new TestClass(20);
b = new ExtendedTestClass(15);
c = [a,b];
trace([c[0].num,c[1].num]); // 20,15


wvxvw 19.04.2007 16:09

Цитата:

Сообщение от iNils
Я так и не понял. Что в итоге должно получится (вне класса)?

Я так понял, что 2 разных объекта, с одинаковым свойством и одинаковым геттером, но разными сеттерами

whiteRed 19.04.2007 16:12

Цитата:

Сообщение от iNils
Я так и не понял. Что в итоге должно получится (вне класса)?

должно получиться: мы переопределям сеттер (не важно, используя super или нет), и он должен работать, причем объекты второго класса хранятся не в переменных, для которых можно указать тип (var q2:Second = new Second(); в этом случае все работает), а в массиве (arr[1] = new Second(); так работать не хочет)

whiteRed 19.04.2007 16:21

попробуйте во втором классе не упоминать про геттер, просто переопределить сеттер - тогда перестает работать


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

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