Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/114: Рейтинг темы: голосов - 114, средняя оценка - 4.67
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107

Метод super

26.01.2011, 01:42. Показов 22189. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
super() - что делает данный метод/функция? Зачем его включать в конструктор класса? Я пробовал стирать иногда и без него все нормально работает...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.01.2011, 01:42
Ответы с готовыми решениями:

Super в обобщениях
Привет! Ребята, почему компилируется этот код? Словом super мы устанавливаем ограничение на аргументы конструктора, должны допускаться...

<? extends E> и <? super E>
class One class Two extends One class Three extends Two One one = new One(); Two two = new Two(); ...

Ключевое слово super
Скажите, как прмиенить это ключево слово super() , для каких целей, если можно небольшой скромный пример.

21
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
26.01.2011, 10:51
y_katz, это не метод, это вызов конструктора базового класса. При этом, если он вызывается, то он должен быть в первой строке тела конструктора
3
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
26.01.2011, 15:50
Если у базового класса есть конструктор с параметрами по умолчанию, то вызов super() можно опустить, он добавится компилятором автоматически. Если такого конструктора нет, или же есть, но нужно вызывать не его - используется super(...) с параметрами, соответствующими нужному конструктору.

P.S. А еще через super вызывают методы родительского класса, полезно, если они переопределены в дочернем.
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
26.01.2011, 16:23  [ТС]
Цитата Сообщение от M128K145
это вызов конструктора базового класса
До меня сейчас вроде начало доходить, я использую super() в конструкторе дочернего класса чтобы вызвать конструктор родительского класса, верно?

Если это верно, то зачем мне может понадобится вызывать конструктор родительского класса в дочернем? Если вас не затруднит, можете привести один такой пример?(не в виде кода, а так, в двух словах)

Добавлено через 34 секунды
Цитата Сообщение от Skipy Посмотреть сообщение
используется super(...) с параметрами, соответствующими нужному конструктору.
а вот такая конструкция что может означать?
Java
1
super(false)
когда передаются парамерты это понятно, но просто false? значит он делофтно присваивается какой-то переменной...а можно как-нибудь узнать эту переменную?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
26.01.2011, 17:22
y_katz, например у вас есть веб-приложение, и есть некоторая сущность А, которая может быть представлена в одном из двух видов - А1 и А2. Представление этих сущностей на веб-странице одинаково, но логика разная. Поэтому вы создаете эту сущность А со страницей, а потом наследуете от нее А1 и А2, но без своих страниц. Так вот перед созданием одной из сущностей А1 или А2, вам надо создать сущность А со страницей. И вот поэтому вы при открытии страницы сущности А1 или А2 не думаете о навернутой логике, о схожих сущностях и всех соседних ветках иерархии, а просто вызываете
Java
1
A1 a = new A1();
и конструктор А1 описываете таким образом:
Java
1
2
3
4
public A1() {
    super();
    ...
}
Это пример из реального приложения

Добавлено через 4 минуты
Цитата Сообщение от y_katz Посмотреть сообщение
когда передаются парамерты это понятно, но просто false?
false - это такой же параметр, только передана не переменная, а значение.
Разницы в коде между
Java
1
A1 a = new A1(true);
и
Java
1
2
boolean isNewObject = true;
A1 a = new A1(isNewObject);
нету
1
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
26.01.2011, 17:57
Цитата Сообщение от y_katz Посмотреть сообщение
До меня сейчас вроде начало доходить, я использую super() в конструкторе дочернего класса чтобы вызвать конструктор родительского класса, верно?

Если это верно, то зачем мне может понадобится вызывать конструктор родительского класса в дочернем?
Смысл конструктора в конструировании состояния класса - инициализации переменных, создании объектов и т.д. Когда Вы наследуетесь от какого-либо класса, Вы его, допустим, расширяете. И все новые элементы состояния инициализируете сами. А вот те элементы, которые есть у базового класса, должен инициализировать именно базовый класс, путем вызова конструктора. Потом Вы при необходимости какие-то из них сможете поменять, но уже после вызова конструктора базового класса. Это если дотянетесь - например, к private-переменным Вы доступа не получите.
1
toxlii
03.08.2013, 00:00
@Я только начинающий в Java... и скажите, правильно ли я думаю на счёт этой темы с вызовом конструктора?

Вызывать конструктор базового класса выгодно тем, что вы можете инициализировать элементы базового класса, указанные в параметрах конструктора, по своему... Так как есть предположение того, что вы эти элементы будете использовать в своих целях, присвоив им свои значения, а значения присвоенные этим элементам родительским классом вам не подходят.
 Аватар для lowercase
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
04.08.2013, 12:29
Цитата Сообщение от toxlii Посмотреть сообщение
Вызывать конструктор базового класса выгодно тем, что вы можете инициализировать элементы базового класса, указанные в параметрах конструктора, по своему...
Вызов конструктора базового класса - это не выгода, а необходимось. Явно или неявно - вызов конструктора базового класса делается всегда. если вы не написали super(), то компилятор сделает это за вас.
однако если базовый класс не имеет конструктора по-умолчанию(то есть конструктора без параметров), то компилятор тут уже сам ничего не сделает - вам нужно явно вызвать конструтор базового класса с параметрами. иначе получите ошибку компиляции.
2
 Аватар для waip
7 / 7 / 1
Регистрация: 27.05.2011
Сообщений: 297
06.08.2013, 18:02
Господа, я верно понял суть?
Миниатюры
Метод super  
0
0 / 0 / 0
Регистрация: 28.12.2012
Сообщений: 5
06.08.2013, 18:45
метод
Java
1
super()
в конструкторе производного класса вызывает конструктор суперкласса. Должен стоять всегда в начале конструктора.
0
185 / 160 / 49
Регистрация: 30.07.2013
Сообщений: 508
06.08.2013, 19:01
Цитата Сообщение от waip Посмотреть сообщение
Господа, я верно понял суть?

Да. Правильно.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
25.06.2016, 16:31
Цитата Сообщение от maxgol Посмотреть сообщение
в конструкторе производного класса вызывает конструктор суперкласса. Должен стоять всегда в начале конструктора.
а если конструктор супер класса с параметром мне надо.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
25.06.2016, 17:09
Цитата Сообщение от RAFA91 Посмотреть сообщение
а если конструктор супер класса с параметром мне надо.
тогда в скобки надо подставить параметры. Ваш К.О
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
26.06.2016, 11:40
выходит будет вызван только конструктор класса от которого насследуемся. ?

а если в цепи наследования несколько классов.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
26.06.2016, 11:49
Цитата Сообщение от RAFA91 Посмотреть сообщение
а если в цепи наследования несколько классов.
каждый класс наследуется только от одного. Если есть цепь, вызывайте super() на каждом уровне.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
26.06.2016, 12:08
после ++ необычно. почему это должно стоять в теле первым
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
26.06.2016, 12:13
Цитата Сообщение от RAFA91 Посмотреть сообщение
а если в цепи наследования несколько классов
В Java запрещено множественное наследование. Может быть всего один предок, он же супер. У него свой предок - свой супер... и так далее по цепочке.

Не по теме:

Уппс!.. Уже ответили. Ну да масло кашей не испортишь :D

0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
26.06.2016, 12:16
Цитата Сообщение от HOBATOP Посмотреть сообщение
В Java запрещено множественное наследование.
я про это что-то сказал ?
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
26.06.2016, 12:23
Цитата Сообщение от RAFA91 Посмотреть сообщение
я про это что-то сказал ?
Из вопроса
Цитата Сообщение от RAFA91 Посмотреть сообщение
а если в цепи наследования несколько классов
следует, что у Вас не совсем чёткое представление именно в данной части. Потому и ответ: в Java существует всего лишь один прямой предок (это не относится к интерфейсам).
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
26.06.2016, 12:30
вы утрируете уважаемый. про множественное наследование ноль слов.

имелось ввиду наследование по цепи. читайте и думайте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.06.2016, 12:30
Помогаю со студенческими работами здесь

Вызов this() или super() внутри конструктора
Добрый день. Подскажите пожалуйста, почему внутри конструктора класса вызов this() или super() должен быть первой строкой, с чем это...

Преимущества использования Generics <T super SomeClass>
Здравствуйте, уже не могу просто, тугой я совсем, если не разберусь с этим вопросом не успокоюсь. Собственно вопрос вот в чем. Обычно не...

Пытаюсь клонировать от super класса, вылазит ошибка
Всем привет, Есть код: public class Task2 { Random rnd = new Random(); final private int ID = 3_654_987; final private int...

Когда нужно в конструкторе применять super. конструктор предка?
Вот у меня есть такой код, пример из книги: class MousePanel extends JPanel { public MousePanel() { squares =...

Почему Eclipse не дает определить конструктор подкласса без использования слова super?
class Box { double width; double height; double depth; Box(double w, double h, double d) { width = w; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru