PDA

Просмотр полной версии : Что такое super в перегруженных функциях? Вопрос быстродействия.


Seagull
07.09.2011, 22:12
Что есть этот super.methode()? Это банально вызов метода из базового класса, Со всеми накладными расходами? Или это синтаксический сахар от компилятора?

Ибо вычитал:

Насчёт this везде ещё соглашусь, однако с точки зрения ООП super всё таки при вызове методов суперкласса писать нужно. Байткод разный получается, так что... лучше переучиваться :)

Байткод разный потому что так - мы работаем с конкретной функцией, а если явно не указали то в рантайме идёт нисходящий поиск по родителям? По хранимым (а они хранятся, насколько я знаю) именам методов классов?


Кроме того там же вычитал про медленность конструктора. Мол он каждый раз просчитывается.

Вообще, в конструкторе лучше либо ничего не писать, либо самый минимум. Конструктор - это самая медленная функция в классе изза того, что каждый раз она по-новому прочитывается (остальные функции раз скомпилировали JIT'oм и используем готовые). Да и ограничения на порядок вызова тоже не самое лучшее - вобщем, если в конструкторе нужна какая-то логика, легче ее всю завернуть в отдельную функцию и вызвать из конструктора чем потом сталкиваться с подобного рода проблемами.


Вообще, поделитесь, люди умные инфой где ТАКОЕ можно найти, или на какие грабли лучше не наступать. И вообще за я почему-то считаю, что программист обязан разбираться не только в том что происходит, но и в том как... Хотя бы простейшем уровне. Вот только спрятали всё это, не найду, поделитесь пожалуйста хотя бы ссылочками. Благодарю.

Psycho Tiger
07.09.2011, 22:18
Байткод разный потому что так - мы работаем с конкретной функцией, а если явно не указали то в рантайме идёт нисходящий поиск по родителям? По хранимым (а они хранятся, насколько я знаю) именам методов классов?

То писалось мной давно и в шутку. Байткод получается действительно разный, но по быстродействию - писать this.method, super.method или method - одинаково. Если, конечно, все три варианта являются одной и той же переменной ;)

Вообще, в конструкторе лучше либо ничего не писать, либо самый минимум. Конструктор - это самая медленная функция в классе изза того, что каждый раз она по-новому прочитывается (остальные функции раз скомпилировали JIT'oм и используем готовые). Да и ограничения на порядок вызова тоже не самое лучшее - вобщем, если в конструкторе нужна какая-то логика, легче ее всю завернуть в отдельную функцию и вызвать из конструктора чем потом сталкиваться с подобного рода проблемами.

По этому поводу я даже тему открывал, можете поискать.