Перегрузка конструкторов

  • 8
  • Недоступна
В этой задаче нам предстоит создать класс Solution и его потомка SubSolution, а для этого потомка — создать конструкторы и исправить их модификаторы доступа так, чтобы получить три конструктора с разными модификаторами (кроме private).
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (73)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Valery Gr
Уровень 22, Москва
24 марта, 20:11
Вопросы. А что получается конструкторы самостоятельно не наследуются от Solution классом SubSolution? Почему нам необходимо снова писать три конструктора в классе SubSolution, если изначально созданные конструкторы в Solution уже имеют реализацию? Есть пояснительная бригада?
Ilya Capercaillie
Уровень 24, Москва, Russian Federation
6 мая, 18:24
конструктор не метод.
Kidchai
Уровень 24, Chicago, United States
27 июня, 18:48
Родительский конструктор наследуется классом-наследником. И вызывается при создании экземпляра класса-наследника. Вот порядок инициализации в классе: 1. Статические поля и статические блоки класса-родителя 2. Статические поля и статические блоки текущего класса 3. Нестатические поля и блоки класса-родителя 4. Конструктор родителя 5. Нестатические поля и блоки текущего класса 6. Конструктор текущего класса Пункты 3-6 выполняются только и при каждом создании экземпляра В классе SubSolution их можно было бы не писать, если бы мы хотели оперировать только конструкторами родительского класса. Но здесь мы решаем прописать и конструкторы класса-наследника. И во время создания экземпляра SubSolution сначала вызовется конструктор Solution, а потом конструктор SubSolution. Попробуйте в Solution написать как-то так:
public Solution() {System.out.println("инициализация конструктора Solution");}
А в SubSolution так:
public SubSolution() {System.out.println("инициализация конструктора SubSolution");}
Потом создайте отдельный класс, в нём создайте экземпляр SubSolution, и вы увидите, в каком порядке инициализируются конструкторы.
Sergey Kornilov
Уровень 39, Petropavlovsk, Казахстан
1 ноября 2021, 06:03
Подсказка : создавай конструкторы с разными типами параметров. Всего эту задачу решили 29654 учеников.
Даниил Александрович
Уровень 35, Тамбов , Россия
27 января 2021, 15:57
Нажмите alt+Insert , но в телефоне такого нет пришлось импровизировать. написал конструкторы запихнул туда вызов super с параметром. результат звёздная пыль с 2х попыток.
Игорь ветеран в Армия России
2 августа 2021, 12:57
восхищаюсь вашим упорством. На таком уровне решать задачи с телефона - это мощно. Я примерно уровне на 5-6 понял, что мне не хватит нервов на это и начал решать задачи только на компе...
Spectre Разливайка в Розливуха
7 августа 2021, 17:50
Так и не смог на айфоне через браузер создать класс в новом файле (
БелК в труселях
Уровень 35, Покровск, Ukraine
15 ноября 2021, 12:13
Я вообще где-то на исключениях без телефона начал решать потому что в условии задачи только с ИДЕА. А вообще там есть куча подсказок (кто решал задачи по времени поймет) и нет компьютера, а телефон всегда рядом.
Максим
Уровень 17, Москва
16 января 2021, 13:46
Кроме того, что прямо требуется в задании, сами создавайте экземпляры класса Solution и SubSolution и смотрите, что будет происходить. Можно в каждый конкструктор каждого класса доставить команду вывода какого-то текста в консоль (System.out.println(...)) и явно увидеть, что, например, при создании экземпляра класса SubSolution будет сначала вызываться конструктор родительского класса. Также есть у классе SubSolution создать конструктор с доступом private, то вызвать его не удастся. Еще один вывод - это то, что модификаторы доступа не являются частью сигнатуры метода. В сигнатуру метода входит только название метода, типа принимаемых параметров и их последовательность. Всё прочее (модификатор доступа, типа возвращаемого значения) в сигнатуру метода не входит, соответственно в одном классе не может быть, например, двух конструкторов с одинаковыми принимаемыми параметрами и с разными модификаторами доступа. Следующий код приведет к ошибке:
public Solution() {
   System.out.println("an object of class Solution has been created using public constructor");
}
protected Solution() {
   System.out.println("an object of class Solution has been created using protected constructor");
}
А такой код работать будет:
public Solution() {
   System.out.println("an object of class Solution has been created using public constructor");
}
protected Solution(String someVariable) {
   System.out.println("an object of class Solution has been created using protected constructor");
}
🦔 Виктор веду учебный тг-канал в t.me/Javangelion Expert
12 января 2021, 03:12
1. Создаём четыре конструктора с разными модификаторами доступа: приватный, публичный, защищённый и пакетный (по умолчанию). 2. Чтобы перегрузить конструкторы, нужно задать им разные параметры (один конструктор без параметров (по умолчанию) тоже считается). 3. В отдельном классе по Alt + Insert реализовываем уже три конструктора (меняя публичные модификаторы, которые генерирует IDEA), потому что приватный переопределить нельзя. 4. Всё получится!
дмитрий кузьмин Java Developer в openCBS
7 октября 2020, 06:52
В очередной раз из-за невнимательности и какой то не нужнй спешки решил только с третьего раза😔
Георгий Лисок
Уровень 22, Минск
4 января 2021, 16:42
такая же беда)
Виталий
Уровень 35, Тобольск , Россия
9 сентября 2020, 05:25
Напоминание ,всего 4 модификатора: public - так и пишется private-так и пишется protected-так и пишется "ничего"- остается пустым, то есть сразу название конструктора,например Solution(String s,int n) ,но модификатор условно есть,просто его не видно. в классе наследнике наследуются все конструкторы,кроме конструктора с модификатором private. Так как к модификатору private можно обращаться только внутри класса,где он объявлен.
Максим Дудин
Уровень 39, Калининград
20 ноября 2020, 14:39
Спасибо добрый человек.... твой здорово коммент помог
Нямка
Уровень 35, Зажопинск
Expert
4 июня 2020, 11:35
И какие, собственно, мысли должны быть после этой задачи.
Alexander Chevtaev
Уровень 25, Bogorodsk
8 июня 2020, 05:55
Только одна "зачем я это делал?"
Alex
Уровень 17, Минск, Беларусь
9 июня 2020, 10:01
приватный конструктор private Solution(double d) { } не будет наследоваться и к нему нельзя обратиться из класса SubSolution - вот что эта задача должна донести до нас
Mike
Уровень 35, Москва, Россия
1 июля 2020, 20:24
Спс за объяснение. Реально не понятно было, в чем смысл задачи!
Evgeny Siganov QA Automation Engineer в Айтеко
13 октября 2020, 10:31
добавлю что при создании конструкторов суперкласса в подклассе через Alt+Insert они расширяются до public и это тоже нужно учитывать
Anonymous #561555
Уровень 35, Казахстан
16 января 2021, 06:46
А почему мы можем сузить модификатор доступа в конструкторе? Вроде в методах нельзя было так...
Temnota
Уровень 19, Минск, Беларусь
1 июня 2020, 14:25
в классе Solution, а не в методе main
Darth Nihilus Разработчик спокойствия в Rage&Flame Industrie
26 мая 2020, 12:45
Не обсуждение задачи, а сплошное ликование в комментах :)