Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.05.2013, 18:10
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 1  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
По умолчанию Какой тип данных правильней использовать в таком случае?

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

Старый 22.05.2013, 18:15
ProcXel.A вне форума Посмотреть профиль Найти все сообщения от ProcXel.A
  № 2  
Ответить с цитированием
ProcXel.A
Banned

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

Старый 22.05.2013, 18:36
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 3  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Dip52,
Это называется наследование, вы можете указать любой родительский класс исходного класса. Переменная класса Object будет принимать абсолютно любой класс, так-как Object - родительский класс вообще всех типов данных.

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

Старый 22.05.2013, 18:40
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 4  
Ответить с цитированием
AlexLucas
 
Аватар для AlexLucas

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


Последний раз редактировалось AlexLucas; 22.05.2013 в 18:58.
Старый 22.05.2013, 19:51
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 5  
Ответить с цитированием
Babylon
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Правильно было бы спросить для чего использовать суперкласс? Мой ответ для хранения и доступа к общим переменным и методам наследуемых классов. В случае если надо изменить наследуемый метод исп. override

Старый 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.

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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