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

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

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

Регистрация: Jan 2012
Сообщений: 836
По умолчанию Предназначение super()

Всем привет. Вот встал вопрос. Объясните предназначение суперкласса в проектах? Ну и что, что он вызывает родительскую версию конструктора, но собственно для чего? Какой смысл?

Старый 07.11.2015, 06:18
DEVORON вне форума Посмотреть профиль Отправить личное сообщение для DEVORON Найти все сообщения от DEVORON
  № 2  
Ответить с цитированием
DEVORON

Регистрация: Jul 2014
Сообщений: 42
В ActionScript 3, super можно вызывать в любом месте конструктора. Например
Код AS1/AS2:
package {
public class SubClass extends SuperClass {
protected var value:int;
public function SubClass(value:int = 0) {
this.value = value;
super(20);
}
}
}

При перекрытии имеет значение. Перекрытием (overriding) называется переопределение метода в классе, который в противном случае был бы унаследован. Новый метод будет использоваться вместо унаследованного (хотя унаследованный метод остается доступен с использованием super).

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Объясните предназначение суперкласса в проектах? Ну и что, что он вызывает родительскую версию конструктора, но собственно для чего? Какой смысл?
Когда создается свой класс, он наследуюе все свойства другого (суперкласса). Даже если не написать extends, он все равно по умолчанию будет наследовать свойства класса Object. Так вот чтобы все эти свойства суперкласса стали доступны, их тоже нужно создать. А так как класс создается вызовом конструктора, его необходимо вызвать. Если конструктор суперкласса не принимает никаких аргументов, то вызывать super() вручную не обязательно. Флеш плеер вызовет его автоматически.
Код AS3:
В ActionScript 3, super можно вызывать в любом месте конструктора.
Не всегда. Например если поставить throw перед вызовом конструктора суперкласса, то эту конструкцию он не пропустит. Поэтому лучше всегда ставить super() первым делом. Тем более что во многих других языках, он обязательно должен быть в самом начале, не надо вырабатывать плохую привычку

Старый 07.11.2015, 12:30
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
не надо вырабатывать плохую привычку
Не вижу ничего плохого в том, чтобы выполнить какие-то действия перед super(), если необходимо.

Старый 07.11.2015, 13:24
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Не вижу ничего плохого в том, чтобы выполнить какие-то действия перед super(), если необходимо.
Например? Что может быть необходимо выполнить перед вызовом super()? Уверен, что любой пример здесь будет просто пимером плохой архитектуры.
Да и, повторюсь, это невозможно сделать во многих других языках. Зачем привыкать делать не правильно?

Старый 07.11.2015, 13:44
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Зачем привыкать делать не правильно?
Может быть для меня это "правильно" так как я не знаю множество других языков? В чем неправильность заключается в контексте AS3.0, ну или в программировании в целом, в той части которая пересекается с AS3.0?

Пример:
В суперконструкторе вызывается протектед метод init(). В наследнике в конструктор передаются параметры, которые я хочу использовать в переопределенном методе init().

Старый 07.11.2015, 13:47
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 7  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Всем спасибо за ответы, частично разобрался)

Старый 07.11.2015, 14:59
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от udaaff Посмотреть сообщение
Может быть для меня это "правильно" так как я не знаю множество других языков? В чем неправильность заключается в контексте AS3.0, ну или в программировании в целом, в той части которая пересекается с AS3.0?

Пример:
В суперконструкторе вызывается протектед метод init(). В наследнике в конструктор передаются параметры, которые я хочу использовать в переопределенном методе init().
Вот, это как раз пример не правильной архитектуры. Сделай сеттеры для всех свойств, которые тебе нужно использовать, и назнач их через сеттеры. А что если в адоби вдруг захотят сделать "правильно" и запретят вызов метода super() после какой-то кода в коснтрускторе? Все приложения, где это есть сразу сломаются. Хотя правильно сделать можно уже сейчас.
А не правильный такой подход исходя из чистой логики. Как с домом, ты пытаешься крыть крышу, не построив стены

Старый 07.11.2015, 15:24
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 9  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Не верная метафора крыша/стены. Дочерний класс строит не крышу, а вносит свои изменения и дополнения в строй материалы и методы их использования для построения этих самых стен. Крыша не является стеной, наследуюясь от стены, она бы являлось таковой. Более того, запись нескольких значений, никак не влияет на построение стен, значения относятся только к наследнику, что не расходится даже с твоей метафорой. Поэтому не убедил меня твой довод

Цитата:
А что если в адоби вдруг захотят сделать "правильно" и запретят вызов метода super() после какой-то кода в коснтрускторе? Все приложения, где это есть сразу сломаются. Хотя правильно сделать можно уже сейчас.
И тут мы плавно возвращаемся к теме, что сотона победил, флеш мертв, и приходится портировать as3 на какого-нибудь уродца на костылях. И да, по поводу правильности тоже вопросы остались.

Старый 07.11.2015, 15:32
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 10  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
А что если в адоби вдруг захотят сделать "правильно"
С тем же успехом адоби может вообще отказаться от обратной совместимости.Программист опасная профессия =)

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

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

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


 


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


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