Переопределение публичной переменной с помощью set - PullRequest
1 голос
/ 17 октября 2011

У меня есть такой базовый класс

class Base {
    public var space:Number;
}

, который расширяется на

class Desc extends Base {

    override public function set space( space:Number ):void {
        //code
    } 

}

Это не компилируется. Скажем, у вас нет контроля над базовым классом, как можно реализовать то же самое?

Очевидным является создание функции setSpace (), но этот объект внедряется в уже существующую систему, использующую public space.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 17 октября 2011

С Adobe :

Переменные-члены класса, объявленные с использованием ключевого слова var, не могут быть переопределенным в подклассе.

Использование сеттера в вашем случае не вариант. Если вам нужно сохранить интерфейс, используйте композицию вместо наследования:

class Desc {

  private var _base:Base;

  public function set space(space:Number):void {
    //code
    this._base.space = space;
  } 
}
3 голосов
/ 17 октября 2011

Ваш базовый класс должен быть определен так:

class Base {

    // Don't use public variables. Make them private and define setters and getters 
    private var space_:Number;

    public function get space():Number {
        return space_;
    }

    public function set space(v:Number):void {
        if (space_ === v) return;
        space_ = v;
    }

}

И тогда это можно переопределить следующим образом:

class Desc extends Base {

    override public function set space( space:Number ):void {
        //code
    } 

}

Edit:

Я пропустил ту часть, где вы говорите, что не имеете контроля над базовым классом. В этом случае надеемся, что space определен как метод получения / установки (так и должно быть, если класс реализован правильно). Если нет, вам действительно придется использовать такие функции, как getSpace и setSpace.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...