Руководство по actionscript. часть 2, стр. 012

Класс Point не расширяет никакой другой класс, поэтому он может свободно расширить класс Serializer. Тем не менее, если некий класс желает использовать класс Serializer, но уже расширяет другой класс, вместо наследования необходимо применять композицию. Иными словами, вместо расширения класса Serializer класс непосредственно реализует интерфейс Serializable, сохранит объект Serializer в переменной экземпляра и переадресует вызовы метода serializer ( ) этому объекту. Например, рассмотрим код упомянутого ранее класса Rectangle. Этот класс расширяет класс Shape, но использует возможности класса Serializer через композицию (обратите особое внимание на строки, выделенные полужирным шрифтом):

// Суперкласс Shape package { public class Shape {

public var fillColonuint = OxFFFFFF;

public var lineColor:uint = 0;

public function Shape (fillColonuint. lineColor:uint) { this. fillColor = fi11 Col or: this. lineColor = lineColor;

}

// Класс Rectangle package {

// Подкласс Rectangle непосредственно реализует // интерфейс Serializable

public class Rectangle extends Shape implements Serializable { public var width:Number = 0; public var height:Number = 0; private var serializer:Serializer:

public function Rectangle (fil 1 Col or :uint. lineColonuint) { super(fillColor, lineColor)

// Именно здесь создается композиция

serializer = new Serializer( );

seri ali zer. setRecordSeparator(«|»);

seri alizer. setSeri alizationVars(["height", "width",

"fillColor". "lineColor"]); seri ali zer. setSeri ali zati onObj(this);

}

public function setSize (w:Number. h:Number):void { width = w; height = h:

}

public function getArea ( ):Number { return width * height;

}

public function serialize ( ):String { // Здесь класс Rectangle переадресует вызов метода serialize( ) // экземпляру класса Serializer, сохраненному // в переменной serializer

return serializer. serialize( );

}

}

}

Как и в случае с классом Point, код, желающий сохранить экземпляр класса Rectangle, просто вызывает метод serialize ( ) над этим объектом. Вызов метода через композицию будет переадресован экземпляру класса Serializer, сохраненному в классе Rectangle. Вот пример использования этого класса:

var r:Rectangle = new Rectangle(0xFF0000. OxOOOOFF); r. setSizedO. 15);

// Отображает: 1ineColor=2551fi11 Color=167116801width=101height=15 trace(r. serialize( ));

Если класс желает реализовать собственную версию метода serialize ( ) вместо того, чтобы использовать базовую версию этого метода, предоставляемую классом Serializer, он должен непосредственно реализовать интерфейс Serializable, предоставив определение и само тело метода serialize( ).

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Оставить комментарий

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 11.03.2011">Руководство по actionscript. часть 4, стр. 009
  • 26.02.2014">Как бросить курить?
  • 04.09.2011">SageThumbs — предварительный просмотр любого файла изображения в Windows Explorer
  • 20.03.2011">Советы web-дизайнеру
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.3
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.23
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.17
  • 17.03.2011">Руководство по actionscript. часть 2, стр. 143
  • 21.03.2011">Руководство по actionscript. часть 2, стр. 050
  • 16.03.2011">Руководство по actionscript. часть 3, стр. 009
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 122
  • 11.03.2011">Руководство по actionscript. часть 4, стр. 002
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.83
  • 01.02.2010">Модульная сетка. Генераторы и сервисы
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 123
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...