На http://www.quizful.net/testRun/xSDkb0kmCVSu есть вопрос, который они относят к синтаксису:
Ответ: values: one two three
Я, откровенно говоря, не правильно ответил, такая запись мне пока не знакома, но в объяснении к этому вопросу следующее:
"Анонимный класс наследуется от ArrayList, вызывается конструктор ArrayList, вызывается инициализатор анонимного класса, вызывается конструктор анонимного класса".
Анонимный класс наследуется от ArrayList?
Я бы мог понять: "Анонимный класс создан на основе ArrayList"
""Унаследован от" и "создан на основе" - наверное разные вещи.
Прошу помочь разобраться, что здесь происходит и как это работает.
Спасибо.
Soros
39 уровень
Может ли анонимный класс наследоваться от другого класса?
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
11 апреля 2020, 09:50
А я вот не понимаю, что такое "Анонимный класс создан на основе ArrayList", что это за конструкция в джаве такая?
Какое ключевое слово отвечает за "создание на основе"?
Или покажи на примере кода.
Про анонимные классы почитай тут:
https://www.geeksforgeeks.org/anonymous-inner-class-java/
Когда ты видишь анонимный класс, он либо наследует класс, на котором вызван, либо имплементирует интерфейс, если указан на интерфейсе.
Напиши например:
тебе Идея подсветит и скажет что нужно реализовать все методы
В мульттипоточности ты должен был их часто писать
Основная особенность анонимного класса, имя и конструкторы у них конечно же есть, но в JVM , на этапе написания кода, мы их знать не знаем и не используем соответственно.
В качестве своеобразных конструкторов у анонимных классов обычно используют блоки инициализации.
0
Soros
11 апреля 2020, 10:09
Ок.
Девятый вопрос подготовки к собеседованию https://javarush.com/quests/lectures/questmultithreading.level03.lecture12 звучит так:
Этот вопрос, судя по всему, часто задаваемый на собеседованиях, есть и на stackoverflow
Предполагаю, что "создан на основе" можно понимать эквивалентно "использует базу".
Это не верно?
0
Pavlo Plynko Java-разработчик в CodeGym Expert
11 апреля 2020, 10:22
В данном случае "создан на основе" и "наследуется" - синонимы. Просто "наследуется" - труднее употребить неправильно. А "создан на основе" больше отдает "я увидел интересный класс и решил написать похожий на его основе" :)
Но в обсуждаемом контексте - синонимы. Т.е. внутри там происходит именно наследование, либо имплементация, переопределение методов, и т.д.
0
Justinian Judge в Mega City One Master
11 апреля 2020, 13:16
Насчет "верно?" Я тебе бросил код по поводу анонимного класса, который использует наследование и реализацию интерфейсов.
У тебя же открытый дискурс по синонимичному ряду каких-то абстракций :)
Мы говорим на разных языках, в контексте конкретного кода с твоего вопроса, конкретный ответ, там наследование, поскольку анонимный класс наследует АррейЛист. В этом анонимном классе блок инициализации который в себя добавляет три элемента.
А твой вопросы из разряда философии программирования, по которой кстати, имплементация интерфейсов это тоже наследование, как вид подвид реюзабельности кода, но это другой уровень абстракции.
На более конкретном уровне, есть имплементация интерфейсов, есть наследование. Все. Остальное может быть синонимами или философским обобщением на более высоком уровне абстракции.
Я лично всегда советую, в непонятных ситуациях всегда понижать уровень абстракции и идти к конкретике.
То есть если бы я на твоем месте встретил бы подобный вопрос,
Первое что я сделал бы, это задал вопрос что это и как это работает.
Ответ очевиден, это анонимные классы, как работают - ссылку я дал выше, примеры кода продемонстрировал.
То есть это конкретная конструкция, которая либо наследует либо имплементирует какой-то класс/интерфейс. Окей.
Если непонятны какие-то нюансы, всегда есть стековерфлоу (английский конечно же, чьи ответа на порядок объемнее, актуальнее и лучше чем любая книжка, на русском ситуация другая - материала мало, качество хромает, и добавляются трудности перевода).
Если бы у меня в голове была бы какая-то нечеткая абстракция, мол там что-то на базе чего-то как-то бывает, я бы эту абстракцию если и вспомнил бы, то сразу бы забыл.
Приоритет всегда конкретному.
Иначе можно уйти в такие степя, как в анекдоте, "да рыбка", , ага, он назвал меня рыбкой, рыбка котик, котик животное, собака тоже животное, ах ты ж №;№, кого ты №;% назвал".
Отсекай лишнее, фокус на конкретике. В программировании много такого, очень важно помнить, что выход там где вход.
+2
Soros
11 апреля 2020, 15:06
Я разве сделал по-другому?
Ясно дело, что как это ни называй, его суть от этого не изменится.
Вопрос возник именно из-за того, что в лекции на Javarush сказано, что "Анонимный внутренний класс не может наследоваться от другого класса".
Как быть с этим утверждением?
0
Стас Пасинков Software Developer в Zipy Master
11 апреля 2020, 15:21
мне кажется, отличаются тем, что когда наследуешься от интерфейса - надо переопределить все его (не дефолтные) методы, написать им реализацию.
когда от абстрактного класса - то достаточно написать реализацию только абстрактным методам (если они там вообще есть), ну и по желанию переписать существующие реализации методов.
когда наследуешься от обычного класса - то можно вообще ничего не дописывать, нет такой необходимости.
в общем, всем тем же отличаются, чем и если унаследовать обычный, не анонимный класс от другого класса, или проимплементить какой-то интерфейс
0
Soros
11 апреля 2020, 16:08
Вопрос про отличия здесь не обсуждается.
То было приведено в качестве демонстрации, где используется формулировка "создан на основе".
Вопрос который я задал в этой ветке звучит так:
На JavaRush сказано, что "анонимный внутренний класс не может наследоваться от другого класса". Как это утверждение можно сопоставить с утверждением "анонимный класс унаследовал класс ArrayList"?
0
Стас Пасинков Software Developer в Zipy Master
11 апреля 2020, 16:36
ну если вы тут это все обсуждаете только из-за того, что в лекциях неправильная формулировка - сделайте хорошее дело, напишите в саппорт, пусть поправят :)
0
Стас Пасинков Software Developer в Zipy Master
11 апреля 2020, 16:40
но вообще, меня в школе когда-то очень долго учили что на 0 делить нельзя, что нельзя взять квадратный корень от отрицательных чисел и еще много всего такого, что потом оказалось "не очень-то и нельзя"...))
так что возможно на том уровне, где обсуждаются анонимные классы - значительно проще было бы сначала научить работать с ними, а потом уже показать, что можно и наследоваться тоже) потому и такая формулировка.
я помню когда статьи писал - то тоже часто приходилось опускать многие моменты и детали просто потому, что если все сразу вывалить - то будет сложно разобраться.
но если провести ученика сначала по простому пути, а потом все сложнее и сложнее, добавляя больше деталей и исключительных ситуация каких-то - так намного проще разобраться в теме (ну как мне кажется).
+2
Алексей Backend Developer
11 апреля 2020, 16:59
Мое видение такое. Анонимный класс изначально или реализует интерфейс или наследуется от какого-либо класса.
То есть если что-то не реализует интерфейс или не наследуется, то это не может быть анонимным классом по определению.
Если анонимный класс уже существует, то он не может дополнительно наследоваться от какого-то еще (другого) класса.
+2
Justinian Judge в Mega City One Master
11 апреля 2020, 17:04
ак быть с этим утверждением
Как я и писал выше, забыть.
Если твои новые знания конфликтуют старые, перепроверяешь новые знания в еще одном источнике, и выбрасываешь в урну конфликтирующее значение.
Если ученые количество планет в Солнечной системе посчитать не могут, то по поводу ткрминологии это нормально если не договорятся .
Одни в ООП 3 принципа выделяют, другие 9, для одних джава процедурный язык, для других ООП.
Про какие-то ошибки уж молчу, ты часто будешь сталкиватьсч с конфл ктом, банально даже в версионности, в 7-й джаве интерфейсы такие, в 8-й другие, в 9-й третьи и тд.
Алгоритм как я и говорил, отметаешь лишнее, разбираешься как ты видишь есть на данный момент, лишнее выбрасываешь. Как GC, ты же уже какой-то третий источник информации привел, и спрашиваешь как с ним быть. Та не нужно вспоминать все что ты читал о анонимных классах.
Есть конкретный пример, тест с quizful.
Ты получил новое знание, анонимные классы это классы которые могут наследоваться и имплементить.
Это так? Да, есть примеры кода, есть инфа в статьях.
Ага
Поместил в голову новую инфу и все.
Зачем вручную перебирать где и что было написано?
Если ты не сомневаешься в своих теперешних знаниях.
Я тоже много где читал, что планет 9. Очень много где, но когда узнал что их 8, просто принял это как факт.
Напомнило, разрешение merge-коныликтов в гите :)
+2