В переменные Птицы помещено поле крылья (экз другого класса) после создания конструктора нужно что то вводить а для этого надо создать экземпляр с названием чтобы убрать ошибку инициализации вызванную конструктором , который дописали позже. Сначала тупил и не мог понять что вписывать то?! потом создал объект и вписал имя(дескриптер) в конструктор. Потом еще ступил и начал думать а зачем переменную то внесли в качестве поле у птиц?! и что с ней там делать?! Но понял что это крутая штука т.к. оперение может быть разным, форма крыльев размер б цвет и все это характеристики которые будут лежать в классе крылья и при необходимости мы сможем их проинициализировать и запросить их при выводе сводной таблицы по конкретной птице! Очень интересно. Спасибо еще в копилку пару песчинок понимания.
но надо было бы создать еще страуса с параметрами суперкласса и локальными какими нибудь, и показать что вот не увеличивая код создаем страуса используя общие и локальные поля
не совсем понятно, зачем создан отдельный класс "Крылья", почему он через стринг указан в классе "Птицы" и почему класс "Страус" extends только класс "Птицы", если он также extends класс "Крылья" (про невозможность множественного наследования поняла, но всё равно странно про крылья)
У меня в классе Main подчёркиваются скобки в коде: Ostrich ostrich = new Ostrich(); Crow crow = new Crow(); В чём причина? Код почти идентичен коду автора, только мэйн класс в том же пакете. ps Видимо надо как-то заполнить скобки, но что писать под wings Wings я не понял. Заменил для крыльев на класс String - и вот только так без ошибок.
(Если ещё актуально) Автор не дописал правильную инициализацию для объектов страуса и вороны. Я для этого отдельно создал крылья страуса и вороны, после чего присвоил их созданным страусу и вороне: Wings ostrichWings = new Wings(); Wings crowWings = new Wings(); Ostrich ostrich1 = new Ostrich("Ostrich1's Name", ostrichWings); Crow crow1 = new Crow("Crow1's Name", crowWings); System.out.println(ostrich1.getName()+" с крыльями "+ostrich1.getWings()); System.out.println(crow1.getName()+" с крыльями "+crow1.getWings());
ок , а что мы можем передать в качестве параметров в конструктор Бердс, например при создании объекта ostrich - первый параметр стринга это понятно, а второй Wings wings, очевидно объект wings? Как это следует записать, можете подсказать?
Все верно. Надо создать объект Wings wings = new Wings; Далее объекту wings просетать поля. (не помню есть ли в моем примере эти поля, но в целом они будут) И потом передать в конструктор. Либо просетать. Вот так: Wings v= new Wings; wings.setColor("red"); // к примеру String birdName= "Voron"; Birds birds = new Berds(birdName, wings);
В текущей версии идеи прога ругается, если оставить аргументы (что в скобках) пустыми. Мне пришлось заменить вместо класса Wings на класс String, чтобы не было ошибок))
fly() наверное стоит оставить в Birds. А у страуса либо переопределить метод fly, чтобы возвращал "не могу летать", либо завести в Birds отдельное поле canFly, строковое или буленово, по значению которого fly() будет сообщать, может конкретная птица летать или нет. А так в целом очень понятные видосы, коротко и по сути. По конструкторам думал, что как и с остальными методами. Если явно не переопределяем, то переносится от родителя какое есть. По наследованию пока не очень догоняю конструкции типа Bird bird = new Ostrich() Зачем это? Создаешь страуса, так и делай страуса. Зачем создавать птицу и потом делать ее страусом? Чтобы дальше по ходу кода переобуться и сделать его вороной? Тем более в таких конструкциях не особо понятно, какие поля и методы будут у bird и как с ними работать.
Все верно, можем напрямую, автор как-то не оттуда зашёл, но все равно молодец. Super используется (в варианте на видео) только если испльзуется конструктор класса и если у суперкласса и подкласса одинаковое название переменных и методов, в таком случае, если обращаться к переменной или методу с одинановым названием в подклассе - приоритет отдается подклассу, а переменные и метод в суперклассе не вызываются, ну а если указать Super (точкая) и название переменной или метода с одинаковим названием тогда это будут метод или переменная из суперкласса . Вообще все подклассы наследуют всех членов своих суперклассов, без модификатором доступа Private к переменным в суперклассе это было б наглядней понятно
Извините, то есть выходит, что при наследовании, обращение к полю дочернего класса в его методе при помощи ключевого слова super фактически эквивалентно использованию this, хотя и означает, грубо говоря, обращение к "родительской части" класса наследника?
В этом нет необходимости, просто иногда в суперклассе происходит какая-та инициализация полей, которые в дальнейшем могут где-то использоваться. Как в случае с Exceptions. По иерархии выше, вы можете передать какое-то сообщение на самую верхушку иерархии, а потом оно будет где-то использоваться - к примеру при выводе stack trace ошибки.
Поля(они же переменные) конструктора или метода - локальные, то есть они видны только в пределах этого конструктора/метода. Когда у класса и у конструктора/метода совпадают названия полей, то одинаковое в них только название, а по факту это две разных переменных. Но из-за того что у них одинаковые имена, как обратиться к переменной класса name изнутри метода, в котором есть своя локальная переменная name? Через this!
Выскажу своё мнение: второй месяц изучаю Java, дошёл до темы наследование, по данному видео курсу практически ничего полезного приобрести нельзя, приведены ужасные примеры для понимания....
по мне так странные примеры, плохо отражающие суть наследования. И да - I AM Ostrich and i AM scared. Английский вроде как нужен в программировании. Надо его знать
Искал этот комментарий :D Так и знал, что какой-нибудь умник не устоит и напишет свое важное замечание. Как будто это урок английского языка, а не программирования.
А ты думал, посмотришь видео и уже знаток? Это не коровам хвосты крутить. Я тоже дня 3 1 только этот урок усваивал. Значит мозг ещё живой, работает. И это не плохо, что не понимаешь, это просто данность, или следствие миропознания :)
да блин, используете английские слова, отрепетируйте их произношение, ну серьезно. одна из основных проблем большинства обучающих программированию на ютубе.
Все уроки были просто супер. А этот какая то чушь. Только запутался с этим уроком. Пришлось в других местах разбираться. Народ не советую его запускать. Лучше другие найдите по данной теме.
спасибо очень полезно, всего тебе доброго и самого хорошего Чуев Александр !!!
Тонкий юмор?)) или мне просто показалось?)
@@followthewhiterabbit6924 нет,уверен,что это искренне.Я присоединяюсь к этому комментарию))спасибо
Спасибо за инфу! Было интересно и полезно!!!)
Сейчас как раз прохожу задачи по этой теме .
Очень тонко про this и super! This is super!
Спасибо. Очень понятно объяснил, респект!
Спасибо, запутало слово "super", хорошо объяснил 👍👍
очень понятно и очень круто, спасибо!
Крутые уроки ! Рекомендую смотреть на скорости 1.5
охренеть как понятно сразу стало)) спасибо большое)
В переменные Птицы помещено поле крылья (экз другого класса) после создания конструктора нужно что то вводить а для этого надо создать экземпляр с названием чтобы убрать ошибку инициализации вызванную конструктором , который дописали позже.
Сначала тупил и не мог понять что вписывать то?! потом создал объект и вписал имя(дескриптер) в конструктор.
Потом еще ступил и начал думать а зачем переменную то внесли в качестве поле у птиц?! и что с ней там делать?!
Но понял что это крутая штука т.к. оперение может быть разным, форма крыльев размер б цвет и все это характеристики которые будут лежать в классе крылья и при необходимости мы сможем их проинициализировать и запросить их при выводе сводной таблицы по конкретной птице! Очень интересно. Спасибо еще в копилку пару песчинок понимания.
но надо было бы создать еще страуса с параметрами суперкласса и локальными какими нибудь, и показать что вот не увеличивая код создаем страуса используя общие и локальные поля
не совсем понятно, зачем создан отдельный класс "Крылья", почему он через стринг указан в классе "Птицы" и почему класс "Страус" extends только класс "Птицы", если он также extends класс "Крылья" (про невозможность множественного наследования поняла, но всё равно странно про крылья)
Хороший урок, спасибо
I know I am kinda randomly asking but does anybody know a good website to watch new tv shows online ?
@James Jameson Flixportal :)
@Lucian Kendrick Thank you, I signed up and it seems to work :D I appreciate it!
@James Jameson Happy to help xD
объясните пожалуйста, зачем нужно конструктор?
Страусы не прячут голову в песок, а прижимают ее к земле )
наследоваться можно только от одного класса, но например можно наследоваться от нескольких интерфейсов
Да ,множественное наследование только от интерфейса
Thanks a million!!!👍👍👍
Спасибо, оч крутой курс. Только там одна ошибка есть. В "public class Birds" Вместо "private Wings wings;" надо написать "private String wings;"
Зачем, если wings это объект класса Wings, его специально создали для описания крыльев.
ну ты и тупой : D
У меня в классе Main подчёркиваются скобки в коде:
Ostrich ostrich = new Ostrich(); Crow crow = new Crow();
В чём причина? Код почти идентичен коду автора, только мэйн класс в том же пакете.
ps Видимо надо как-то заполнить скобки, но что писать под wings Wings я не понял. Заменил для крыльев на класс String - и вот только так без ошибок.
(Если ещё актуально) Автор не дописал правильную инициализацию для объектов страуса и вороны.
Я для этого отдельно создал крылья страуса и вороны, после чего присвоил их созданным страусу и вороне:
Wings ostrichWings = new Wings();
Wings crowWings = new Wings();
Ostrich ostrich1 = new Ostrich("Ostrich1's Name", ostrichWings);
Crow crow1 = new Crow("Crow1's Name", crowWings);
System.out.println(ostrich1.getName()+" с крыльями "+ostrich1.getWings());
System.out.println(crow1.getName()+" с крыльями "+crow1.getWings());
Я повторно у дочерних классов ключевое слово extends удалял и заново писал и почему то ошибка пропадала
зачем класс wings ?
Красава конечно, но немного получилось кручу-верчу. Спасибо!
здравствуйте, вопрос, класс наследник может свои методы создавать кроме методов родителя?
Здравствуйте, да, конечно!
на 10:21, при обращении к одному полю супер класса из двух подклассов (crow и Ostrich) мы обращаемся к разным экземплярам bird ?
Супер
чё так мелко?
ок , а что мы можем передать в качестве параметров в конструктор Бердс, например при создании объекта ostrich - первый параметр стринга это понятно, а второй Wings wings, очевидно объект wings? Как это следует записать, можете подсказать?
Все верно. Надо создать объект Wings wings = new Wings;
Далее объекту wings просетать поля. (не помню есть ли в моем примере эти поля, но в целом они будут)
И потом передать в конструктор. Либо просетать. Вот так:
Wings v= new Wings;
wings.setColor("red"); // к примеру
String birdName= "Voron";
Birds birds = new Berds(birdName, wings);
спасибо!
@@followthewhiterabbit6924 Большое спасибо.
В текущей версии идеи прога ругается, если оставить аргументы (что в скобках) пустыми. Мне пришлось заменить вместо класса Wings на класс String, чтобы не было ошибок))
fly() наверное стоит оставить в Birds. А у страуса либо переопределить метод fly, чтобы возвращал "не могу летать", либо завести в Birds отдельное поле canFly, строковое или буленово, по значению которого fly() будет сообщать, может конкретная птица летать или нет.
А так в целом очень понятные видосы, коротко и по сути.
По конструкторам думал, что как и с остальными методами. Если явно не переопределяем, то переносится от родителя какое есть.
По наследованию пока не очень догоняю конструкции типа
Bird bird = new Ostrich()
Зачем это? Создаешь страуса, так и делай страуса. Зачем создавать птицу и потом делать ее страусом? Чтобы дальше по ходу кода переобуться и сделать его вороной?
Тем более в таких конструкциях не особо понятно, какие поля и методы будут у bird и как с ними работать.
Вы занимаетесь преподавательской деятельностью?
На сайте в описании указано, чем он занимается.
Спасибо!
Извините, не могу понять смысл "super". Разве мы не можем обратиться к полям и методам класса Birds посредством прямого обращения: Birds. ..... ?
дело в том что переменная в супер-классе может быть private
@@DotaAllstars4Тогда обращаться через геттер и сеттер, разве нет?
Все верно, можем напрямую, автор как-то не оттуда зашёл, но все равно молодец. Super используется (в варианте на видео) только если испльзуется конструктор класса и если у суперкласса и подкласса одинаковое название переменных и методов, в таком случае, если обращаться к переменной или методу с одинановым названием в подклассе - приоритет отдается подклассу, а переменные и метод в суперклассе не вызываются, ну а если указать Super (точкая) и название переменной или метода с одинаковим названием тогда это будут метод или переменная из суперкласса . Вообще все подклассы наследуют всех членов своих суперклассов, без модификатором доступа Private к переменным в суперклассе это было б наглядней понятно
Извините, то есть выходит, что при наследовании, обращение к полю дочернего класса в его методе при помощи ключевого слова super фактически эквивалентно использованию this, хотя и означает, грубо говоря, обращение к "родительской части" класса наследника?
Все верно )
не понимаю зачем сделали так, что в дочернем плене необходимо конструктор повторят.
В этом нет необходимости, просто иногда в суперклассе происходит какая-та инициализация полей, которые в дальнейшем могут где-то использоваться. Как в случае с Exceptions. По иерархии выше, вы можете передать какое-то сообщение на самую верхушку иерархии, а потом оно будет где-то использоваться - к примеру при выводе stack trace ошибки.
шрифт маленький ниче не видно
Так и не-понял зачем этот this если все одинаково. Таким макаром можно его неиспользовать какая разница от куда будут идти значения.
Поля(они же переменные) конструктора или метода - локальные, то есть они видны только в пределах этого конструктора/метода. Когда у класса и у конструктора/метода совпадают названия полей, то одинаковое в них только название, а по факту это две разных переменных. Но из-за того что у них одинаковые имена, как обратиться к переменной класса name изнутри метода, в котором есть своя локальная переменная name? Через this!
thenks
Выскажу своё мнение: второй месяц изучаю Java, дошёл до темы наследование, по данному видео курсу практически ничего полезного приобрести нельзя, приведены ужасные примеры для понимания....
Крутяк
начало немножко затянутое
по мне так странные примеры, плохо отражающие суть наследования. И да - I AM Ostrich and i AM scared. Английский вроде как нужен в программировании. Надо его знать
Искал этот комментарий :D Так и знал, что какой-нибудь умник не устоит и напишет свое важное замечание. Как будто это урок английского языка, а не программирования.
Я ничего не понял, потому что я отвлекается и не слушал
+++
колибри ходить не умеет
нихера не понятно
А ты думал, посмотришь видео и уже знаток? Это не коровам хвосты крутить. Я тоже дня 3 1 только этот урок усваивал. Значит мозг ещё живой, работает. И это не плохо, что не понимаешь, это просто данность, или следствие миропознания :)
да блин, используете английские слова, отрепетируйте их произношение, ну серьезно. одна из основных проблем большинства обучающих программированию на ютубе.
Согласен!)
Все уроки были просто супер. А этот какая то чушь. Только запутался с этим уроком. Пришлось в других местах разбираться. Народ не советую его запускать. Лучше другие найдите по данной теме.
Спасибо, все шикарно объяснено