Java SE. Урок 21. Наследование. Использование this и super

Поделиться
HTML-код
  • Опубликовано: 2 фев 2017
  • В данном видео речь идет о еще одном принципе ООП - это наследование.
    Наследование - это отношения между классами, при котором характеристики одного класса (суперкласса) передаются другому классу (наследнику) без необходимости их повторного определения.
    Наследник в свою очередь может расширять возможности суперкласса путем добавления своих: полей, методов, конструкторов и логических блоков.
    При этом для работы с атрибутами суперкласса используется ключевое слово super, а для работы с атрибутами данного класса (наследника) - ключевое слово this.
    Множественное наследование в java запрещено, однако разрешено множественное наследование интерфейсов, что дает почти те же возможности, что и при наследовании.

Комментарии • 72

  • @woodscrock
    @woodscrock 3 года назад +12

    Очень тонко про this и super! This is super!

  • @serjioletti
    @serjioletti Год назад +2

    Спасибо за инфу! Было интересно и полезно!!!)
    Сейчас как раз прохожу задачи по этой теме .

  • @tokepala5227
    @tokepala5227 4 года назад +8

    спасибо очень полезно, всего тебе доброго и самого хорошего Чуев Александр !!!

    • @followthewhiterabbit6924
      @followthewhiterabbit6924  4 года назад +5

      Тонкий юмор?)) или мне просто показалось?)

    • @tkr4961
      @tkr4961 2 года назад

      @@followthewhiterabbit6924 нет,уверен,что это искренне.Я присоединяюсь к этому комментарию))спасибо

  • @nickpetrushkin6139
    @nickpetrushkin6139 3 года назад +1

    Спасибо, запутало слово "super", хорошо объяснил 👍👍

  • @AgadadievOka
    @AgadadievOka 2 года назад +3

    Спасибо. Очень понятно объяснил, респект!

  • @antonmakhatilov8008
    @antonmakhatilov8008 5 лет назад +1

    охренеть как понятно сразу стало)) спасибо большое)

  • @greenkingshop1033
    @greenkingshop1033 Год назад +2

    очень понятно и очень круто, спасибо!

  • @vladislavnesterov8561
    @vladislavnesterov8561 Год назад +1

    Спасибо, все шикарно объяснено

  • @djadjaandrey
    @djadjaandrey 10 месяцев назад

    Thanks a million!!!👍👍👍

  • @turgayalekberli9554
    @turgayalekberli9554 5 лет назад +2

    Хороший урок, спасибо

    • @jamesjameson5530
      @jamesjameson5530 2 года назад

      I know I am kinda randomly asking but does anybody know a good website to watch new tv shows online ?

    • @luciankendrick6642
      @luciankendrick6642 2 года назад

      @James Jameson Flixportal :)

    • @jamesjameson5530
      @jamesjameson5530 2 года назад

      @Lucian Kendrick Thank you, I signed up and it seems to work :D I appreciate it!

    • @luciankendrick6642
      @luciankendrick6642 2 года назад

      @James Jameson Happy to help xD

  • @javacoderfromchengdu2734
    @javacoderfromchengdu2734 6 лет назад

    thenks

  • @mschief4867
    @mschief4867 4 года назад

    на 10:21, при обращении к одному полю супер класса из двух подклассов (crow и Ostrich) мы обращаемся к разным экземплярам bird ?

  • @Voronovsky
    @Voronovsky 2 года назад

    Спасибо!

  • @dicur3x
    @dicur3x 3 года назад +1

    Страусы не прячут голову в песок, а прижимают ее к земле )

  • @dianaofitserova4427
    @dianaofitserova4427 Год назад

    Супер

  • @romabulava899
    @romabulava899 3 года назад +2

    но надо было бы создать еще страуса с параметрами суперкласса и локальными какими нибудь, и показать что вот не увеличивая код создаем страуса используя общие и локальные поля

  • @bednieporosyatki
    @bednieporosyatki 4 года назад +1

    В переменные Птицы помещено поле крылья (экз другого класса) после создания конструктора нужно что то вводить а для этого надо создать экземпляр с названием чтобы убрать ошибку инициализации вызванную конструктором , который дописали позже.
    Сначала тупил и не мог понять что вписывать то?! потом создал объект и вписал имя(дескриптер) в конструктор.
    Потом еще ступил и начал думать а зачем переменную то внесли в качестве поле у птиц?! и что с ней там делать?!
    Но понял что это крутая штука т.к. оперение может быть разным, форма крыльев размер б цвет и все это характеристики которые будут лежать в классе крылья и при необходимости мы сможем их проинициализировать и запросить их при выводе сводной таблицы по конкретной птице! Очень интересно. Спасибо еще в копилку пару песчинок понимания.

  • @vole4
    @vole4 2 года назад +1

    не совсем понятно, зачем создан отдельный класс "Крылья", почему он через стринг указан в классе "Птицы" и почему класс "Страус" extends только класс "Птицы", если он также extends класс "Крылья" (про невозможность множественного наследования поняла, но всё равно странно про крылья)

  • @arturarslanov6229
    @arturarslanov6229 3 года назад +1

    Крутые уроки ! Рекомендую смотреть на скорости 1.5

  • @eugenetaranoff1122
    @eugenetaranoff1122 7 лет назад +1

    ок , а что мы можем передать в качестве параметров в конструктор Бердс, например при создании объекта ostrich - первый параметр стринга это понятно, а второй Wings wings, очевидно объект wings? Как это следует записать, можете подсказать?

    • @followthewhiterabbit6924
      @followthewhiterabbit6924  7 лет назад +3

      Все верно. Надо создать объект Wings wings = new Wings;
      Далее объекту wings просетать поля. (не помню есть ли в моем примере эти поля, но в целом они будут)
      И потом передать в конструктор. Либо просетать. Вот так:
      Wings v= new Wings;
      wings.setColor("red"); // к примеру
      String birdName= "Voron";
      Birds birds = new Berds(birdName, wings);

    • @eugenetaranoff1122
      @eugenetaranoff1122 7 лет назад

      спасибо!

    • @rimus999
      @rimus999 4 года назад

      @@followthewhiterabbit6924 Большое спасибо.

    • @podpalmoi
      @podpalmoi 3 года назад +1

      В текущей версии идеи прога ругается, если оставить аргументы (что в скобках) пустыми. Мне пришлось заменить вместо класса Wings на класс String, чтобы не было ошибок))

  • @americanpie959
    @americanpie959 4 года назад

    Крутяк

  • @altayski3704
    @altayski3704 2 года назад +1

    Красава конечно, но немного получилось кручу-верчу. Спасибо!

  • @lmmunne
    @lmmunne Год назад +1

    наследоваться можно только от одного класса, но например можно наследоваться от нескольких интерфейсов

    • @zolotoesolnse6348
      @zolotoesolnse6348 8 месяцев назад

      Да ,множественное наследование только от интерфейса

  • @covers4505
    @covers4505 4 месяца назад

    объясните пожалуйста, зачем нужно конструктор?

  • @zorigtojerebtsov1126
    @zorigtojerebtsov1126 2 года назад

    здравствуйте, вопрос, класс наследник может свои методы создавать кроме методов родителя?

  • @podpalmoi
    @podpalmoi 3 года назад +3

    У меня в классе Main подчёркиваются скобки в коде:
    Ostrich ostrich = new Ostrich(); Crow crow = new Crow();
    В чём причина? Код почти идентичен коду автора, только мэйн класс в том же пакете.
    ps Видимо надо как-то заполнить скобки, но что писать под wings Wings я не понял. Заменил для крыльев на класс String - и вот только так без ошибок.

    • @VitaliyCislyak
      @VitaliyCislyak 2 года назад

      (Если ещё актуально) Автор не дописал правильную инициализацию для объектов страуса и вороны.
      Я для этого отдельно создал крылья страуса и вороны, после чего присвоил их созданным страусу и вороне:
      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());

    • @user-ji4uc2ce1s
      @user-ji4uc2ce1s Год назад

      Я повторно у дочерних классов ключевое слово extends удалял и заново писал и почему то ошибка пропадала

  • @dontknowwhattotypelo
    @dontknowwhattotypelo 6 лет назад +10

    Извините, не могу понять смысл "super". Разве мы не можем обратиться к полям и методам класса Birds посредством прямого обращения: Birds. ..... ?

    • @DotaAllstars4
      @DotaAllstars4 3 года назад +1

      дело в том что переменная в супер-классе может быть private

    • @mikhaillazarev5378
      @mikhaillazarev5378 2 года назад

      @@DotaAllstars4Тогда обращаться через геттер и сеттер, разве нет?

    • @user-wr7wk3fg4v
      @user-wr7wk3fg4v 2 года назад +3

      Все верно, можем напрямую, автор как-то не оттуда зашёл, но все равно молодец. Super используется (в варианте на видео) только если испльзуется конструктор класса и если у суперкласса и подкласса одинаковое название переменных и методов, в таком случае, если обращаться к переменной или методу с одинановым названием в подклассе - приоритет отдается подклассу, а переменные и метод в суперклассе не вызываются, ну а если указать Super (точкая) и название переменной или метода с одинаковим названием тогда это будут метод или переменная из суперкласса . Вообще все подклассы наследуют всех членов своих суперклассов, без модификатором доступа Private к переменным в суперклассе это было б наглядней понятно

  • @andriybondarenko6282
    @andriybondarenko6282 7 лет назад +5

    Извините, то есть выходит, что при наследовании, обращение к полю дочернего класса в его методе при помощи ключевого слова super фактически эквивалентно использованию this, хотя и означает, грубо говоря, обращение к "родительской части" класса наследника?

    • @followthewhiterabbit6924
      @followthewhiterabbit6924  7 лет назад +4

      Все верно )

    • @user-qy7yv1ut4c
      @user-qy7yv1ut4c 7 лет назад

      не понимаю зачем сделали так, что в дочернем плене необходимо конструктор повторят.

    • @followthewhiterabbit6924
      @followthewhiterabbit6924  7 лет назад +1

      В этом нет необходимости, просто иногда в суперклассе происходит какая-та инициализация полей, которые в дальнейшем могут где-то использоваться. Как в случае с Exceptions. По иерархии выше, вы можете передать какое-то сообщение на самую верхушку иерархии, а потом оно будет где-то использоваться - к примеру при выводе stack trace ошибки.

  • @nmodonov
    @nmodonov 3 года назад +2

    fly() наверное стоит оставить в Birds. А у страуса либо переопределить метод fly, чтобы возвращал "не могу летать", либо завести в Birds отдельное поле canFly, строковое или буленово, по значению которого fly() будет сообщать, может конкретная птица летать или нет.
    А так в целом очень понятные видосы, коротко и по сути.
    По конструкторам думал, что как и с остальными методами. Если явно не переопределяем, то переносится от родителя какое есть.
    По наследованию пока не очень догоняю конструкции типа
    Bird bird = new Ostrich()
    Зачем это? Создаешь страуса, так и делай страуса. Зачем создавать птицу и потом делать ее страусом? Чтобы дальше по ходу кода переобуться и сделать его вороной?
    Тем более в таких конструкциях не особо понятно, какие поля и методы будут у bird и как с ними работать.

  • @user-iv1bj9vf1i
    @user-iv1bj9vf1i 2 года назад +1

    Спасибо, оч крутой курс. Только там одна ошибка есть. В "public class Birds" Вместо "private Wings wings;" надо написать "private String wings;"

    • @mrian_2910
      @mrian_2910 Год назад +1

      Зачем, если wings это объект класса Wings, его специально создали для описания крыльев.

    • @chpokerchpoker9407
      @chpokerchpoker9407 Год назад

      ну ты и тупой : D

  • @pavelvoitishin3487
    @pavelvoitishin3487 3 года назад

    Вы занимаетесь преподавательской деятельностью?

    • @podpalmoi
      @podpalmoi 3 года назад

      На сайте в описании указано, чем он занимается.

  • @user-ib2lq9td5h
    @user-ib2lq9td5h 4 года назад

    Так и не-понял зачем этот this если все одинаково. Таким макаром можно его неиспользовать какая разница от куда будут идти значения.

    • @hexruin4569
      @hexruin4569 4 года назад +2

      Поля(они же переменные) конструктора или метода - локальные, то есть они видны только в пределах этого конструктора/метода. Когда у класса и у конструктора/метода совпадают названия полей, то одинаковое в них только название, а по факту это две разных переменных. Но из-за того что у них одинаковые имена, как обратиться к переменной класса name изнутри метода, в котором есть своя локальная переменная name? Через this!

  • @td1424
    @td1424 Год назад

    зачем класс wings ?

  • @NarkotikAsd
    @NarkotikAsd 3 года назад

    шрифт маленький ниче не видно

  • @yarik83men51
    @yarik83men51 5 лет назад

    +++

  • @nuki7944
    @nuki7944 5 лет назад

    начало немножко затянутое

  • @augustolasker3462
    @augustolasker3462 Год назад +1

    чё так мелко?

  • @user-bn9wc8db6s
    @user-bn9wc8db6s 2 года назад +1

    Выскажу своё мнение: второй месяц изучаю Java, дошёл до темы наследование, по данному видео курсу практически ничего полезного приобрести нельзя, приведены ужасные примеры для понимания....

  • @koneri85
    @koneri85 2 года назад

    по мне так странные примеры, плохо отражающие суть наследования. И да - I AM Ostrich and i AM scared. Английский вроде как нужен в программировании. Надо его знать

    • @floatmasta
      @floatmasta Год назад +1

      Искал этот комментарий :D Так и знал, что какой-нибудь умник не устоит и напишет свое важное замечание. Как будто это урок английского языка, а не программирования.

  • @olzhas654
    @olzhas654 3 года назад +2

    Я ничего не понял, потому что я отвлекается и не слушал

  • @AkzholSlamzhanov
    @AkzholSlamzhanov 3 года назад

    нихера не понятно

    • @podpalmoi
      @podpalmoi 3 года назад

      А ты думал, посмотришь видео и уже знаток? Это не коровам хвосты крутить. Я тоже дня 3 1 только этот урок усваивал. Значит мозг ещё живой, работает. И это не плохо, что не понимаешь, это просто данность, или следствие миропознания :)

  • @lmmunne
    @lmmunne Год назад +1

    колибри ходить не умеет

  • @tomskiy1700
    @tomskiy1700 4 года назад

    да блин, используете английские слова, отрепетируйте их произношение, ну серьезно. одна из основных проблем большинства обучающих программированию на ютубе.

  • @fortunido
    @fortunido 6 лет назад

    Все уроки были просто супер. А этот какая то чушь. Только запутался с этим уроком. Пришлось в других местах разбираться. Народ не советую его запускать. Лучше другие найдите по данной теме.