Жаркая, помогай. Знаю, что тут все пиздец 300к/сек программисты. Нужна ваша помощь. Есть задание пикрелейтед. Нужен ответ. Сам вообще ни разу не айти, учился на другую хуйню и про программирование помню ток бейсик и то смутно. Само задание дают джунам перед собеседованием. Мне просто ради интереса хочется узнать че за ответ там правильный и если не лень пояснять, то почему.С меня нихуя, естесственно.
Если это не вопрос с подвохом что где то точку с запятой не так поставили то выведет Some good text. Ибо ну объект класса наследника создаётся, а метод в исходном классе определён.
>>226812857Хуетой вроде явы лет 10 не пользовался, но там же вроде как переопределен метод у наследника
>>226813299>>226813180Да я обосрался, ключевое слово должно быть если ты хочешь указать что метод такой же как в исходном классе. А тут он как пустой определён.
>>226812550 (OP)Спрашиваешь помощи на при прохождении тестового только после того как скидываешь скрин отправки сообщения этому рекрутеру о снятии своей кандидатуры на позицию. ЭТО ПРАВИЛО АЙТИ СООБЩЕСТВА
>>226812550 (OP)ГУД ТЕКСТ оно никак вывести не могло, тк это разные поля. А вот метод переопредилился и не выведет нихуя.
>>226813467Да вы заебали я вообще комп только для игор использую . Мне вообще было интересно просто чё это за хуйня такая сложно ли оно и вот это вот все
>>226813503Уебан ты конченный это гуглформа с какой нить вакансии на хх. "я не я мне просто случайно в руки попала ссылка на тестовое для джунов хз просто нашел в интернете" Иди ка ты чеши кому то другому, халявщик недоделанный
>>226813593>сложно ли оно и вот это вот всеНе слушай петухов. Это очень просто, но ошибиться даже жабо-мидол может, ибо нахуй оно ему надо. Наследование переоценено. Используется везде, но не в виде, в котором преподносят в книжках.
>>226813380А что в этой вашей яве если хочешь чтобы метод наследника работал как метод папани надо еще и ключевое слово писать? Зачем его вообще определять в таком случае?
>>226813703Вот этого двачюю. Но надо же как-то отсеивать кандидатов. Поэтому и выдумывают эти анальные задачки.
>>226812857>>226812971>Если это не вопрос с подвохом что где то точку с запятой не так поставили то выведет Some good textЕБАТЬ ДВА ДЕБИЛАтам же даже на скрине переменная data выделена комплиятором серым, потому что НИГДЕ СУКА НЕ ИСПОЛЬЗУЕТСЯ
>>226814149На самом деле это очень хуевое задание. Так как проверяет только твою блять внимательность, а не как не знания. А многие на собеседованиях еще и нервничают, мысли путаются. Нахуя такие тесты? Лучше спрашивать о знаниях человека, пытаться выведать у него что лично он знает, с чем работал, какие задачи решал, чтобы что-то написал там, классы с наследниками, увидеть как он ООП понимает, про паттерны спросить, пускай расскажет своими словами что знает, с чем работал, и т.д. А этот тест хуйня для лошков. Ошибиться в нем легко любому.погорячившийся >>226813907-кун
>>226813979В рубях, питонах например я такой дичи не припомню, если уж отнаследовался, то и все методы папани автоматически твои
>>226814463Если надо переопределить - берешь и создаешь у наследника метод с таким же именем, скрыть хз - можно создать метод с таким же именем ничего не делающий
>>226814305Хуй знает что оно там проверяет, но задание элементарное, не знаю как тут можно обосраться.
>>226814305У нас такими заданиями отсеивают тех, кто вообще ничего не писал но считают что они неебические разработчики. Задания вроде этого показывают есть ли у человека именно интуитивное понимание того, как ооп в жабе работает.
К тому же мы понимаем, что одна задача не показатель, и кандидат может ошибиться или не иметь глубокого понимания конкретно этой особенности языка. Поэтому на собеседовании мы предлагаем тест из 30 вопросов подобного содержания и позволяем совершить до 5 ошибок.
>>226814886ды хуй знает, тут же чисто на внимательность, ты, может, и в курсе про наследственность, но проебал, что метод пустой
>>226814820Не будет, во-первых, приведение типов избыточно. Во-вторых, IDE выдаст предупреждение и попросит добавить модификатор new для поля Data и метода DoStuff у класса-наследника. В-третьих, результатом вызова будет вывод в консоль "Some text", а если верить анонам из треда, то в консоль ничего не выведится, т. е. так, будто метод у базового класса имеет модификатор virtual, а у класса наследника override.
>>226812550 (OP)Ничего не распечатает, потому что метод doStuff виртуальный, а сам объект является типом GoodPlugin, соответственно, во время рантайма произойдёт полифмормизм.
>>226812550 (OP)В коде ссылка w и так типа Plugin, нет смысла ее приводить к этом уже типу.А метод вызывается у реализаци, тоесть у GoodPlugin, соответственно ничего не будет напечатано.
>>226815696https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.invokevirtualСказали пацаны из оракла.
>>226815969Твоя полумёртвая мамашка шлюха с раком последней стадии не жаловалась. Я ей ещё на могилу поссу.
>>226815541> во время рантайма произойдёт полифмормизм.Кому какое дело до твоего полиморфизма, если перед вызовом метода, мы приводим экзепляр дочернего класса к родительскому?
Вообще говоря, судя по тому, что эти классы написаны прямо в классе с psvm, у них модификатор static пропущен.
>>226815400Почему при вызове конструктора наследника а осталось 2 или при приведении ((plugin*)ass) оно снова стало 1?
>>226812550 (OP)blya easy,no outputU tebya1 class {doStuff()}2 class extends 1 class {doStuff() <- zamenil u parent// on nichego ne vivodit}sozdayosh 2 class u kotorogo doStuff svoicastish ego k 1-u klassu u kotorogo est' takoi je metod signature, no real'nie metod to 2-go classa, poetomu on i zapuskaetsya
>>226816527> Почему при вызове конструктора наследника а осталось 2 или при приведении ((plugin*)ass) оно снова стало 1?Потому что привели, нет?
>>226816481Двачую.Вызываемый метод определяется не типом переменной, хранящей ссылку, а собсна объектом.В данном случае метод переопределен - он ничего не делает.
>>226816516Здесь переменная w преводится к Plugin, но она и так типа Plugin. Это наебка от авторов задания чтоб отвлечь внимание
>>226816200>>226816292И ты думаешь если я перепишу "правильно", результат изменится? Именно этого я и ожидал - очередная роспись жаба-даунов в своей тупости. >>226816345>>226816229Охуенный язык - оверрайдятся скрытно. Что там еще скрытно делается? Может он мне еще диск скрытно форматнет? >>226816259Зачем приводить переменную типа A к типу A, где логика, дауненок? Зачем вообще тогда статическая типизация нужна, если такой говнокод компилируется? >>226816305Как раз всё так. У тебя тип переменной Plugin, поле Data у этого типа имеет значение "Some text", метод DoStuff не перезаписан в классе-потомке, поэтому будет вызываться метод который соответствует типу переменной, т. е. Plugin.DoStuff. Всё максимально прозрачно и логично, потому что это язык для людей, а не жаба-макак.
>>226816481Я ничего не переопределял, потому что не применял модификатор override. Просто жаба решила, что я должен соснуть хуйца и переопределила метод за меня.
>>226816582При приведении снова конструктор родительского класса вызвался или что произошло? Или доступ к приватному полю получили снова?
>>226816593А ну добавь еще, что из-за класскаста этому объекту не будут доступны методы, которые есть только в наследуемом классе. Т.е. Если будет doStuff2 а наследнике, но не будет в родительском, то объект после класскаста не сможет дернуть его.
>>226816612А в чем смысл вообще такого приведения? Если бы в GoodPlugin не был определен метод doStuff, разве по-умолчанию не использовался бы родительский?
А вот как нужно написать код на нормальном ЯП для того чтобы получить, по мнению жаба-макак, "правильный" ответ.
>>226815400Не как в плюсах, в плюсах надо было бы ещё модификатор virtual добавить чтобы такое же поведение получить.
>>226816748Ну, даже не после классксата, а сразу после объявления вида Parent a = new Child();ну иди я слишком макака, а ты про расширение типа, которое тут неявно происходит...
Какая-то гимнастика ментальная. Зачем это нужно вообще? Какой смысл указывать тип родителя, если хочешь использовать наследника?
>>226816929У опа просто с класскастом.Я сам на жабе писал последний раз 3 года назад, сейчас ушел уже на js, намного веселее язык, хотя отладка боль еще та. Да и на ванильной жабе только в универе проекты пилил, потом классика дня сурка: спринга, хибер и прочие шалости.
>>226816644>Зачем приводить переменную типа A к типу A, где логика, дауненок?ты, дебил, даже условие теста не почитал
>>226816644> И ты думаешь если я перепишу "правильно", результат изменится? Именно этого я и ожидал - очередная роспись жаба-даунов в своей тупости.Ебать ты долбоеб -- с чего ты взял что в шарпе и в джаве эти куски кода вообще хоть как-то эквивалентны? Твой C# нужно ещё хорошенько virtual'ами обмазать, чтобы получить поведение дефолтное в JVM
>>226816644Аннотация @Override необязательна, т.к логически видно, что идет оверрайд, но аннотации принято ставить для хорошего тона.
>>226816024Это лишний шаг, чтобы тебя запутать. Так-то если его убрать, нихуя конечно и не поменяется, класс как был к "a" изначально приведен был к "А" при объявлении, так и останется.
>>226817019Для того чтобы можно было передать переменную в метод, принимающий тип родителя, после чего использовать её как переменную класса-наследника.
>>226817080Да я как-то наскоком пробежался, приложеньку для бд на спирнг бут веб + flyway + кусочки js и ajax склепалосознал, что жаба кора не знаю по сути, каким-то методом говна и палок пишу.Так на РАБоту не попасть...вот за основы взялся...
>>226816644> Зачем приводить переменную типа A к типу A, где логика, дауненок? Зачем вообще тогда статическая типизация нужна, если такой говнокод компилируется?Логика в том чтобы тебя, долбоеба, запутать. Это лишний шаг.
>>226816729>жуна такую хуиту не спрашивают.nu v kakoi nubud' kontorke ne bol'shoi mojet bit', hotya na technical interview sprashivayut
>>226816644> Как раз всё так. У тебя тип переменной Plugin, поле Data у этого типа имеет значение "Some text", метод DoStuff не перезаписан в классе-потомке, поэтому будет вызываться метод который соответствует типу переменной, т. е. Plugin.DoStuff. Всё максимально прозрачно и логично, потому что это язык для людей, а не жаба-макак.Ебать ты долбоеб. Во-первых ты нихуя не знаешь как работает полиморфизм, во-вторых ты даже метод в своём языке нормально переопределить не смог.
>>226816744>>226816582a в родительском и а в дочернем это разные штуки, раз они в приватных полях? А то я овощной.
>>226817257Пишите классы без лишних методов.>>226817263Если без троллинга, то выглядит как костыли. Не зря же статическая типизация есть, чтобы хуйню всякую не передавали.
>>226817084>что будет напечатано>условие теста>что будет>условиеНе перестаю проигрывать жава-животного.>>226817100А кто тебе об эквивалентности хоть что-то говорил? Этот тред служит хорошим доказательством тому, что жава-дерьмо является языком для макак с отсутствием логики, в то время как C# создан для людей для которых логика это не пустой звук. >>226817212>т.к логически видно, что идет оверрайдЛогически как раз видно, что никакого оверрайда не идёт, логически видно создание новой реализации для метода DoStuff.>>226817228>>226817277>я не обосрался, я просто тебя запутывалТак я и спрашиваю, даунята, зачем вам статический анализатор, если он дает скомпилировать код с избыточным приведением типов? >>226817412>нормально переопределить не смог.Зачем мне его переопределять, долбоеб? Я написал новую реализацию, также как и в ОП-посте. Но жаба-макак почему-то надрессировали на то, что это не новая реализация, а перезапись существующей. >>226817436Чтобы вызывать метод типа которому соответствует тип объекта переменной, а не метод типа которому соответствует тип переменной. Т. е. то, что ваша жава-параша делает неявно, тем самым подтверждая свое предназначение как языка для макак с отсутствием логики.
>>226817722> Если без троллинга, то выглядит как костыли. Не зря же статическая типизация есть, чтобы хуйню всякую не передавали.oh ti znachit e6e daje generics ne videl bratishka
>>226817781> Чтобы вызывать метод типа которому соответствует тип объекта переменной, а не метод типа которому соответствует тип переменной. Т. е. то, что ваша жава-параша делает неявно, тем самым подтверждая свое предназначение как языка для макак с отсутствием логики.kek, eto C# retards nikak ne mogut ot c++ syntax otoiti, do sih por pi6ut lishnie keywords v kode kotorii delaet vse nechitaemimsucks to be you man
>>226817781Для overload нужны разные параметры, а тут они одинаковые/их нет. Логически все четко читается.
>>226817722>Пишите классы без лишних методов.Тебе в конкретном случае нужна переменная с интерфейсом как у Plugin, но реализацией как у GoodPlugin.
>>226817781хуета с приведением типов здесь для того чтоб отвлечь внимание, чисто наебка>А кто тебе об эквивалентности хоть что-то говорил? Этот тред служит хорошим доказательством тому, что жава-дерьмо является языком для макак с отсутствием логикиВ чем доказательство?>Логически как раз видно, что никакого оверрайда не идётв жабе если ты у класса-наследника пишешь метод с таким же названием как у класса-предка, то он автоматически переопределяется
>>226817781> А кто тебе об эквивалентности хоть что-то говорил? Этот тред служит хорошим доказательством тому, что жава-дерьмо является языком для макак с отсутствием логики, в то время как C# создан для людей для которых логика это не пустой звук.Пока ты показал только что базовые ООП-парадигмы в C# накодить не в состоянии.> Так я и спрашиваю, даунята, зачем вам статический анализатор, если он дает скомпилировать код с избыточным приведением типов?А должен? Формально это не ошибка. В C# это тоже отработает на дефолтных конфигах.> Зачем мне его переопределять, долбоеб? Я написал новую реализацию, также как и в ОП-посте. Но жаба-макак почему-то надрессировали на то, что это не новая реализация, а перезапись существующей.> Я написал новую реализацию, также как и в ОП-постеДа нихуя ты не как в ОП-посте написал. Более того, тебе любой инструмент код-квалити тебе по ебалу даст за наследование без полиморфизма.> Чтобы вызывать метод типа которому соответствует тип объекта переменнойА нахуй это надо вообще? Это же тупо ненужный костыль, переехавший из C++, который там был только для совместимости с С.> Т. е. то, что ваша жава-параша делает неявно, тем самым подтверждая свое предназначение как языка для макак с отсутствием логики.Ну да, языки программирования у нас же характеризуется тем, сколько хуйни надо в явном виде написать -- чем больше, тем лучше! Даун блять. Ты ещё небось из тех, для кого type inferrence -- это зло?
>>226817781> А кто тебе об эквивалентности хоть что-то говорил?> Я написал новую реализацию, также как и в ОП-постеТы либо крестик сними, либо трусы надень.
>>226815935Ахуеть, я сначала не понял, а потом как вспомнил что в C# классы нихуя не классы и всё ООП там приходится руками доделывать. Пиздец блять, давно я за кресты не садился.Алсо, то что на скрине на C# считается стрёмным говнокодом.
>>226820747> C# классы нихуя не классы и всё ООП там приходится руками доделыватьТы конченый, ты это знаешь? C# весь спроектирован именно как ООП язык.
>>226812857Почему он пишет плагин в - нью гудплагин, выделяя память под объект наследуемого класса, создавая объект родительского или что это вообще?
>>226822195> C# весь спроектирован именно как ООП язык> Полиморфизм надо включать рукамиАга, как же. Маня, C# -- просто попытка перетащить C++ на стековую виртуалку, при чем максимально консервативно. Language-дизайн там как направление очень появился сильно потом -- отсюда и эксцессы в виде поведения как у этого дебила >>226815935 когда в любом другом языке ожидаешь полиморфизм при работе с классом, а получаешь необходимость реализовывать его самостоятельно через virtual member, потому что так ещё деды реализовывали полиморфизм на структах в C.
>>226822843Зачем ты везде ищешь С++, шизоид. Прочитай хотя бы начало треда и ты увидишь, что С# это максимально логичный ООП-язык, потому что при написании кода из ОП-поста, он выдаст ожидаемый для большинства результат, а не тот, который ожидают жаба-макаки потому что они зазубрили то, что override модификатор добавляется неявно у класса-потомка, а virtual у класса-родителя. Вот и всё, никаких заговоров и С++ там нет, хуесосина ты тупорылая.
>>226822843Причем здесь вообще плюсы, конченный дебил? С# это попытка взять лучшее из джавы и развивать это, так как джава, что бы кто ни говорил, очень удачный язык. У майкрософта это более чем удачно получилось, и C# прекраснейший, логичный язык.
>>226824140Двачую, после шарпа на жабу без стыда не посмотришь. Даже спустя дохуя времени остаётся вполне юзабельным языком, в отличие от жабы или плюсов.
>>226812550 (OP)> Само задание дают джунам перед собеседованиемТак это же элементарщина пиздец. Я так понимаю в методе main() последняя строка это приведение к типу верно? странно как-то выглядит
>>226824468Просто C# активнее развивался и в правильном направление, а джава, которая начиналась как очень прогрессивный язык, стала излишне консервативной из-за обилия энтерпрайза, но они потом поняли свою ошибку и пытаются догнать, вот только теперь они в роли догоняющего, хотя должно было быть наоборот. Ну и еще гугл взял джаву за основной язык на андроиде, это им дало невероятный буст, правда оказалось что джава на андроиде еще более консервативна, лол, и гугл в итоге сделал себе го и котлин.
>>226824848Котлин ничего общего с гуглом не имеет, на го гугл успешно забил и делает ставку на развитие котлина.
>>226825267Гугл не забивал на го, ты что. Там огромная поддержка идет комьюнити. Как и котлину. Просто сейчас, да, гугл решил что теперь котлин будет главный языком под андроид, хотя они сделали с самого начала ошибку, выбрав "свободную" джаву. Им нужно было выбирать чужой C# от гнусного Майкрософта. Даже сейчас Xamarin, фреймворк на C#, показывает лучшую производительность чем "нативная джава". А если бы его еще поддерживал сам гугл, это была бы бомба.
>>226826680И вообще по хорошему метод который оверрайдит метод родительского класса должен обозначаться аннотацией.
>>226826795Всё верно - запущенный код. И верным это его совсем не делает, это причина по которой он является не верным.
>>226826587>Что будет написано при выполнении кода?>Анон переписывает код и запускает - выводит нихуяДелаем выводы?
Вы реально конченые тут? Хэйтить Java? Что? Или это тонко-жирный троллинг или вы реально больные на голову, лол.
>>226813703>Наследование переоценено. Двачую. А ещё эта хуйня с полиморфизмом бесполезное говно.Мимо го-девелопер
>>226827271Сори но мне не нравится как выглядит код на c++[]^&static_cast<>()~[]->(__Plugin)&(myPlugin) &= &huita_iz_jopy
>>226823442>>226824140Затем и при томчто я-то знаю историю языков, на которых пишу, как они дизайнились и как эволюционировали их фичи. И необходимость руками руками выкручивать то, что должен обрабатывать оптимизирующий компилятор -- это сраный рудимент со времен когда деды делали классы на C, инкапсулируя данные и методы в структуру и реализуя полиморфизм через virtual -- потому что компилятор тогда в принципе не знал что такое классы.И одно дело когда это оставили в C++ -- совместимость с си, вся хуйня.Но другое дело как объебалса микрософт, перетаскивая дизайн C++ на CLR.Любой современный полностью отдаёт такие шаблонные заморочки компилятору и предоставляет нормальный ООП без подвохов.>>226824848>>226824468Джуны рассуждают о языках, из которых кое-как освоили только один, как мило.>>226825267Ага, как же, забил на один язык, на котором у них половина системной архитектуры построена, в пользу языка от русских, который они используют только под android.
>>226829857>И одно дело когда это оставили в C++ -- совместимость с си, вся хуйня.Ты настолько тупой, что даже не понимаешь о том, что если метод помечен модификатором virtual, то вызов данного метода ресурсозатратнее, чем метода без данного модификатора, потому что в первом случае необходимо делать проверку типа объекта. У тебя, долбоеба, причиной по которой так сделали является не менее долбоебское "ПАТАМУШТА В СИШЕЧКЕ ТАКЖИ!!"
>>226830309Ты настолько тупой что пытаешься рассказать про какую-то совсем элементарную и старую проблему из CS, преподнося её как какую-то непреодолимую догму, а не как что-то, что без лишнего оверхеда решается современным компилятором и рантаймом (в т.ч. кстати рантаймом CLR, но почему-то не компилятором C# https://softwareengineering.stackexchange.com/questions/234473/how-are-virtual-methods-slower-in-c). А я тебе всю дорогу говорю, что у C# хуевый дизайн языка, из-за которого он тащит ненужное легаси и не использует фичи родной платформы. Если ты используешь class -- ты ДОЛЖЕН работать в парадигмах ООП и у тебя должен быть полиморфизм BY DESIGN, а не через легаси-костыли. У тебя в принципе не должно быть юзкейса, когда ты наследуешь какой-то класс, объявляешь в нём метод с той же сигнатурой как у родителя и НЕ переопределяешь его -- это грубейший говнокод. Для всех неООП-случаев классы не должны использоваться -- для этого есть структы (и их кстати в джаве по сути тоже нет, так что джава так-то тоже гавно ебаное).