Показать сообщение отдельно
Старый 22.05.2013, 23:20
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Когда я в классе Main экземплирую класс A, то я могу указать тип данных (var a: = new A() либо A, либо B.
Тупой пример:
Код AS3:
public addChild(child:DisplayObject)//Где-то в описании API флешплеера
...
addChild(new MovieClip());
addChild(new Sprite());
addChild(new TextField());
Если бы разработчики API написали в определении
Код AS3:
public addChild(child:MovieClip)
То Вы бы не смогли добавить всё остальное;
А здесь:
Код AS3:
var sprite:Sprite = new Sprite();
var movieClip:MovieClip = new MovieClip();// или var movieClip:Sprite = new MovieClip();
movieClip.addFrameScript(...);//А вот так сможете написать, если обрезали тип до Sprite?
//Но даже если вызова специальных методов MovieClip не требуется, здесь всё происходит внутри функции - обрезка типа переменной гибкости не добавит
addChild(sprite);
addChild(movieClip);
Особой разницы нет. Вы всё равно знаете что создаёте. Но специфичные методы MovieClip могут понадобиться, поэтому лучше не морочить голову и написать MovieClip.

Писать более общий тип имеет смысл в параметрах на входе функций или в полях класса.