![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Здравствуйте.
Есть три класса: Main, A и B. Класс A унаследован от класса B. Когда я в классе Main экземплирую класс A, то я могу указать тип данных (var a: = new A() либо A, либо B.Из этого случая меня заинтересовал вопрос: какой конкретно тип данных нужно указывать? |
|
|||||
|
Banned
[+1 27.05.13]
Регистрация: May 2013
Сообщений: 60
|
Если ты вдруг создашь класс С, который будет унаследован от В, а потом твоя переменная а захочет стать экземпляром С, то лучше прописать тип В. Если переменная а всегда будет экземпляром А, то лучше указать тип А. Как-то так.
|
|
|||||
|
Dip52,
Это называется наследование, вы можете указать любой родительский класс исходного класса. Переменная класса Object будет принимать абсолютно любой класс, так-как Object - родительский класс вообще всех типов данных. Какой тип данных указать переменной зависит от контекста её использования. Если вам будет достаточно лишь свойств и методов родительского класса, то его как тип данных и укажите. Тогда, все классы, наследуемые от него смогут храниться в этой переменной.
__________________
Дети не должны знать о своих родителях |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Если классы полностью взаимозаменяемы, зачем их 2 ?
Всё зависит от того что конкретно вам надо, и от конкретного случая. В классе А может быть переписано некоторое поведение класса В, тогда можете попасть впросак. Вообще, если вы создаёте дочерний класс, вы, по идее, должны точно представлять где будет использоваться именно он, а когда его супер класс. Как, например, если взять что обычная пила по дереву это супер класс, а лобзик и полотно для железа - дочерние классы, явно пилу по дереву нельзя будет успешно использовать вместо лобзика и полотна для металла. Но в то же время у них есть общая функция - пилить, и чтобы порезать себе палец, подойдёт любая пила ![]()
__________________
Oomph Последний раз редактировалось AlexLucas; 22.05.2013 в 18:58. |
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
Правильно было бы спросить для чего использовать суперкласс? Мой ответ для хранения и доступа к общим переменным и методам наследуемых классов. В случае если надо изменить наследуемый метод исп. override
|
|
|||||
|
Цитата:
public addChild(child:DisplayObject)//Где-то в описании API флешплеера ... addChild(new MovieClip()); addChild(new Sprite()); addChild(new TextField()); То Вы бы не смогли добавить всё остальное; А здесь: var sprite:Sprite = new Sprite(); var movieClip:MovieClip = new MovieClip();// или var movieClip:Sprite = new MovieClip(); movieClip.addFrameScript(...);//А вот так сможете написать, если обрезали тип до Sprite? //Но даже если вызова специальных методов MovieClip не требуется, здесь всё происходит внутри функции - обрезка типа переменной гибкости не добавит addChild(sprite); addChild(movieClip); Писать более общий тип имеет смысл в параметрах на входе функций или в полях класса. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:56. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|