|
|
|||||
ООП. Интерфейсы
Если класс Figure реализовывает несколько интерфейсов: IMoveable, IDragable, ICleanable
то при вот таком объявлении перемнной будут ли доступны у этого объекта методы из IDragable и ICleanable? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
у объекта будут. У переменной fig1 – нет. Надо создать переменные типа IDragable, ICleanable, либо кастовать fig1 к этим типам данных.
__________________
Reality.getBounds(this); |
|
|||||
спасибо, все понятно
|
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
|
|
|||||
Регистрация: May 2010
Сообщений: 543
|
Цитата:
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с) |
|
|||||
Если есть несколько объектов, которые надо обрабатывать одновременно и как IMoveable и как IDragable и как ICleanable, то лучше для них еще один интерфейс сделать и заставить его реализовывать
Потому что иначе, при передаче в метод, который использует все 3 интерфейса возникнут вопросы, а какой из них передавать? и что приводить внутри типы? public function process(item:IDragable...и еще должен быть IMovable, ...? public function process(item:IMoveDragCleanable):void// Так явно понятнее а если для разных функций нужны произвольные комбинации интерфейсов - на комбинаторный взрыв числа отнаследованных интерфейсов можно напороться. Последний раз редактировалось expl; 05.11.2011 в 01:48. |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Вообще для случая, когда "класс Figure реализовывает несколько интерфейсов: IMoveable, IDragable, ICleanable " напрашивается композиция.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Цитата:
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Почему же, будут. Только зачем тогда вообще интерфейсы, если нет полиморфизма и класс один-одинешенек?))
__________________
Reality.getBounds(this); |
|
|||||
Цитата:
Ты вроде спрашивал будут ли они доступны в виде: Так вот методы из IDragable будут доступны в данном случае, и все остальные тоже, но компилятору придется явно указывать что fig1 оказывается еще и IMoveable и ICleanable. Как написал Wolsh в первом же ответе. Но только тогда непонятно зачем это нужно вообще? Если все три интерфейса будут использоваться в одном месте то смысла объявлять переменную с типом одного из интерфейсов смысла нет, проще сделать эту переменную сразу с типом класса реализовываюющим эти интерфейсы. Интерфейсы нужны там где в определенном месте тебе нужны только методы из этого интерфейса. Например функция драга, в каком-то глобальном классе, ей пофигу что драгать, и в качестве параметра она принимает IDragable. В таком случае ты используешь класс как тебе надо, а в функцию его передаешь как кучу других. Яркий пример это BitmapData#draw (и еще много других, это просто на языке крутится) - он принимает IBitmapDrawable и ему глубоко пофигу может ли принятый им объект что-то кроме того что описано в интерфейсе. Ну т.е. если такого разделения не нужно то собственно и смысл интерйесов слегка нивелируется. Делай обычный класс и не парь никому моск. Если же у тебя есть отдельный модель который работает с драгами, отдельный с клинами, отдельный с мувами - то да, делай интерфейсы но тогда и вопросы отпадают на тему доступа к остальному функционалу класса не описанному в каждом конкретном интерфейсе. Как еще один метод использования интерфейсов это просто к примеру большая команда, есть совсем зеленые, и вот чтоб совсем зеленые или же просто новый человек не напихал отсебятины пишутся интерфейсы. Мол пиши внутри что хочешь, но вот этот набор методов должен быть и быть должен в таком вот виде. Но такой подход я лично встречал не так часто. Команда у нас небольшая и надобности не возникало. Добавлено через 3 минуты Цитата:
Получи ТС два ответа по цене одного
__________________
Кто к нам с чем для чего - тот у нас того от того. |
Часовой пояс GMT +4, время: 07:54. |
|
« Предыдущая тема | Следующая тема » |
|
|