Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Какой тип данных правильней использовать в таком случае? (http://www.flasher.ru/forum/showthread.php?t=199692)

Dip52 22.05.2013 18:10

Какой тип данных правильней использовать в таком случае?
 
Здравствуйте.
Есть три класса: Main, A и B.
Класс A унаследован от класса B.
Когда я в классе Main экземплирую класс A, то я могу указать тип данных (var a: = new A();) либо A, либо B.
Из этого случая меня заинтересовал вопрос: какой конкретно тип данных нужно указывать?

ProcXel.A 22.05.2013 18:15

Если ты вдруг создашь класс С, который будет унаследован от В, а потом твоя переменная а захочет стать экземпляром С, то лучше прописать тип В. Если переменная а всегда будет экземпляром А, то лучше указать тип А. Как-то так.

Tails 22.05.2013 18:36

Dip52,
Это называется наследование, вы можете указать любой родительский класс исходного класса. Переменная класса Object будет принимать абсолютно любой класс, так-как Object - родительский класс вообще всех типов данных.

Какой тип данных указать переменной зависит от контекста её использования. Если вам будет достаточно лишь свойств и методов родительского класса, то его как тип данных и укажите. Тогда, все классы, наследуемые от него смогут храниться в этой переменной.

AlexLucas 22.05.2013 18:40

Если классы полностью взаимозаменяемы, зачем их 2 ?
Всё зависит от того что конкретно вам надо, и от конкретного случая.
В классе А может быть переписано некоторое поведение класса В, тогда можете попасть впросак.
Вообще, если вы создаёте дочерний класс, вы, по идее, должны точно представлять где будет использоваться именно он, а когда его супер класс.
Как, например, если взять что обычная пила по дереву это супер класс, а лобзик и полотно для железа - дочерние классы, явно пилу по дереву нельзя будет успешно использовать вместо лобзика и полотна для металла. Но в то же время у них есть общая функция - пилить, и чтобы порезать себе палец, подойдёт любая пила :)

Babylon 22.05.2013 19:51

Правильно было бы спросить для чего использовать суперкласс? Мой ответ для хранения и доступа к общим переменным и методам наследуемых классов. В случае если надо изменить наследуемый метод исп. override

expl 22.05.2013 23:20

Цитата:

Когда я в классе 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.

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


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

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