Java для начинающих. Урок 41: Абстрактные классы.

Поделиться
HTML-код
  • Опубликовано: 4 май 2017
  • МОЙ НОВЫЙ КУРС: • Мой курс "Продвинутая ...
    ПРАКТИКА НА JAVA: java-marathon.tilda.ws
    Реклама и сотрудничество: alishev.neil@gmail.com

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

  • @alishevN
    @alishevN  6 лет назад +8

    Регистрируйтесь на курс "Продвинутая Java": ruclips.net/video/rRe1vT0SDD8/видео.html
    Практикуйтесь в написании Java кода: java-marathon.tilda.ws

  • @pertshgalstyan6189
    @pertshgalstyan6189 6 лет назад +126

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

  • @dontknowwhattotypelo
    @dontknowwhattotypelo 5 лет назад +127

    Получается:
    1) абстрактный класс = что-то базовое и большое, мы должны реализовать ВСЕ абстрактные методы, это удобно когда под этот класс попадают все или почти все сущности (например создаем машины, а в абстрактном классе есть абстрактные методы wheels, maxSpeed, doors, color, name и все машины имеют эти аттрибуты, т.е. реализовать все абстрактные методы ЕСТЬ смысл)
    2) Интерфейсы = куски описания, которые не всегда пересекаются и их можно комбинировать, например нам нужно описать компьютер. Нет смысла все тулить в абстрактный класс, ведь компьютера бывают разные: ноутбук, домашний ПК, сервер, compute stick. И объекты будут иметь поля: внешний блок питания (большой ПК / сервер), Адаптер питания (ноутбук, маленький компьютер), монитор, встроенный дисплей (ноутбук), DVD-привод (у compute stick нет вообще такого) и т.д., то есть нет смысла все это пихать в абстрактный класс и потом при желании создать объект ноутбука переопределять ненужные методы типо внешнего дисплея, внешнего блока питания и большого корпуса, т.к. это ноутбук и там попросту этого нет. А вместо этого можно реализовать по отдельности интерфейсы ноутбук, домашний ПК, сервер, compute stick, которые уже будут иметь только НУЖНЫЕ методы.
    Я правильно рассуждаю?

    • @alishevN
      @alishevN  5 лет назад +24

      Все правильно! Хорошие аналогии.

    • @nod745
      @nod745 5 лет назад +42

      Если я правильно понимаю, то интерфейс описывает то, что класс будет уметь делать =)) В вашей аналогии ноутбук, домашний ПК и т.д - это не интерфейсы, а сущности.
      Отсюда логичнее было бы сделать абстрактный класс Computer и от него создавать конкретные классы наследники Notebook, Compute Stick.
      Прошло 8 месяцев, но все же =)))

    • @alexlukhanin
      @alexlukhanin 4 года назад +47

      хочу уточнить и добавить: " а в абстрактном классе есть абстрактные методы wheels, maxSpeed, doors, color, name " - это поля, а не методы. Методы обозначают действие и описываются глаголами (run, go, eat, ride etc). Еще важная разница между абстрактными классами и интерфейсами: интерфейсы не могут иметь полей, а абстрактные классы могут, как и любые классы. Классы как абстрактные так и нет именуются существительным (wheels, maxSpeed, doors, color, name), а интерфейсы прилагетельными, которые указывают на умение или возможность действия(eatable, ableToGo, runable, shotable etc)...

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

      @@nod745 А удобнее ли? На сколько я понял, интерфейс более гибкий и обширный. Какая необходимость была создавать абстрактные классы, если возможно их заменить интерфейсами?

    • @Serelais
      @Serelais 3 года назад +10

      @@vladimirplohotniuk5214 представь, что у тебя код игры и в нем есть 150-200 персонажей, каждому нужен набор данных, внешность, поведение, класс, раса и т. д., если ты каждому персонажа будешь иплементить по 20 интерфейсов, это не очень удобно

  • @Artem_35_
    @Artem_35_ 6 лет назад +19

    Никогда не устану говорить вам спасибо, за такие простые и лаконичные объяснения казалось бы не самых простых идей!

  • @yegorivanov3006
    @yegorivanov3006 4 года назад +37

    От видео к видео понимаю, что ещё не всё потеряно и смена сферы деятельности - реальность! Спасибо! Пока не могу отплатить большим чем коммент и лайк, поэтому вот!

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

      В колокол позвони :)

    • @feliksbekeshov7668
      @feliksbekeshov7668 2 года назад +6

      Интересно , спустя год узнать чем ты сейчас занимаешься? получил ли ты свою первую работы в сфере айти? Если да то поздравляю

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

      @@feliksbekeshov7668 а ты кемто стал за год?(просто интересно, сейчас 2 месяц учусь)

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

      @@user-zy7ix8lf1f привет, да уже работаю разработчиком

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

      @@feliksbekeshov7668 красава

  • @speksi1504
    @speksi1504 Год назад +3

    Долго не понимала тему абстрактные классы, а после просмотра видео сразу стало все на свои места. Спасибо!

  • @mikhailochkaev2454
    @mikhailochkaev2454 2 года назад +18

    Я с таким наслаждением и без особых усилий еще никогда не приобретал новые знания, все благодаря грамотной подаче материала👍

  • @r0d1oN
    @r0d1oN 4 года назад +4

    Однозначно лайк. Ты просто мега-доступно объясняешь. Огромное спасибо) Протолкнул меня на множество просветлений в джаве))

  • @kladmonet9
    @kladmonet9 4 года назад +3

    Всё по полочкам! Благодарю за инфу. Даже решил кое-что законспектирвоать!

  • @user-xs4cs6nn3g
    @user-xs4cs6nn3g 6 лет назад +5

    Автор, огромное спасибо вам! Все очень понятно объясняете. Очень ждем нового приближающегося курса:3

  • @charlesdarwin6087
    @charlesdarwin6087 2 года назад +5

    Спасибо за понятные и наглядные объяснения, почти всегда начинаю изучение темы с просмотра вашего видео. Возможно, иногда рассматриваются не все глубинные аспекты и тонкости, но после выработки полноценного понимая сути той или иной конструкции - можно спокойно это понимание расширять различными тонкостями и подробностями. Для выработки этого понимания, на мой взгляд, лучший канал и в принципе источник информации в русскоязычном сегменте 👍

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

    Как все таки доходчиво ты объясняешь!!! Спасибо!!!

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

    СПАСИБО ОГРОМНОЕ! Я ОЧЕНЬ ДОЛГО НЕ МОГ ПОНЯТЬ КАК ОТЛИЧАЮТСЯ Абстрактный класс и интерфейс! Здесь я понял всё и сразу! Спасибо большое! Очень часто ты объясняешь то, чего нет нигде, и без чего было-бы сложно обойтись! Очень тебе благодарен. Ещё раз огромное спасибо!

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

    За это и люблю программирование. Ролику 6 лет! А он до сих пор лучше всего, что я видел по этой теме до этого. Спасибо огромное.
    Вы делаете жизнь тысячи начинающих программистов проще.

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

    Ну просто всё разжевал досконально. Спасибо!!!

  • @sereda206
    @sereda206 6 лет назад +4

    Редко когда пишу комментарии, но твои видео просто супер, помогают в обучении. Спасибо огромное

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

    Отличный канал! Всё понятно. Спасибо.

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

      Пожалуйста :)

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

    Большое спасибо! Все по полочкам.

  • @user-fl6wu9tl8l
    @user-fl6wu9tl8l 3 года назад

    Спасибо большое за ваш труд!

  • @user-fk7jl4ht1c
    @user-fk7jl4ht1c 5 лет назад +1

    Классно объяснил, спасибо большое тебе.

  • @Shorts-ut2xb
    @Shorts-ut2xb 2 года назад +1

    автор просто настоящее золото разжевал то что я месяц не мог понять

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

    Спасибо большое. Понятно всё объяснил

  • @palatense6584
    @palatense6584 7 лет назад +2

    Спасибо огромное!

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

    Хорош. Аплодирую стоя!

  • @user-yr5vo3um6y
    @user-yr5vo3um6y Год назад +1

    Хороший выпуск🔥

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

    Спасибо!
    Юзаю информацию для подготовки к экзамену по программированию в Германии :)

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

    Блин, это круто и гениально.

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

    Спасибо за урок)

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

      Пожалуйста!

  • @roman_akbashev
    @roman_akbashev 6 лет назад +31

    Урок хороший, но тут ничего не сказано про то, что абстрактные классы можно использовать для того что бы не реализовывать все методы интерфейса. Т.е. :
    public interface Test {
    public void first();
    public void second();
    }
    public abstract class TestAbstract implements Test {
    @Override
    public void first(){
    System.out.println("Hello World");
    }
    }
    далее наследуемся от абстрактного класса и пользуемся методом. В данном случае нам не пришлось реализовывать все методы интерфейса которые могут быть избыточными. Я думаю на это нужно обратить внимание.

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

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

    • @user-ut3dp7er3j
      @user-ut3dp7er3j 5 лет назад +4

      Если далее наследоваться от абстрактного класса, то все равно нужно будет реализовать методы интерфейса

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

      ​@@user-ut3dp7er3j если в интерфейсе прописать default поведение метода, то его не обязательно реализовывать ( java 8+) в в классе, который имплементирует этот интерфейс

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil 2 года назад

      @@maxkatrenko8865 ну говорят то про другую особенность

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

    Мое почтение!

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

    Спасибо!

  • @user-vj5fv6rv5u
    @user-vj5fv6rv5u 6 месяцев назад

    Спасибо большое

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

    Здорово!

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

    Супер понятно!

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

    Спасибо за работу.
    Доступно, но поверхностно. Это маме посмотреть чем сын весь день занят))

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

      @@GtoUfromR
      - Можно использовать reference variable типа abstract класса, чтобы ссылаться на объект дочернего класса, который не является abstract.
      - abstract класс не может быть final! - потому что это 2 противоположных понятия, final - не наследуется, а abstract класс для того и пишут чтобы он имел наследников!
      - У abstract классов есть конструктор. Даже независимо от того, что создать объект классу abstract невозможно! + если мы его создали, то его нужно будет перезаписать в дочернем классе с ключевым словом super(); иначе компилятор заблочит код.
      - Для методов не допустимо сочетание: final abstract, private abstract, static abstract. Private abstract - просто на просто не виден, а должен быть перезаписан. Static abstract - статические методы не могут быть перезаписаны, а абстрактные методы должны быть перезаписаны. Final abstract - также не сможем делать @Override метода. Потому что он final. Он в целом не может наследоваться!
      - Конкретный класс(типа обычный) может расширять(extends) абстрактный класс и на оборот. Также абстрактный класс может расширять абстрактный класс! ЭТО тоже РАЗРЕШЕНО! И также АБСТРАКТНОМУ КЛАССУ РАЗРЕШЕНО имплементировать ИНТЕРФЕЙС.
      - Абстрактные классы используются, когда есть отношение "is-a", то есть класс-наследник расширяет базовый абстрактный класс, а интерфейсы могут быть реализованы разными классами, вовсе не связанными друг с другом. - это про различия между классом и интерфейсом.
      - *Абстрактный класс наследуется (extends), а интерфейс - реализуется (implements). Мы можем наследовать только один класс, а реализовать интерфейсов - сколько угодно (Наследование - одно уровневое, Реализация - многоуровневая). Интерфейс может наследовать (extends) другой интерфейс/интерфейсы, но не КЛАССЫ, это запрещено компилятором
      - *Интерфейс описывает только поведение (методы) объекта, а вот состояний (полей) у него нет (кроме public static final), в то время как у абстрактного класса они могут быть. private переменные не создашь в виде полей, потому что геттеры и сеттеры к ним не опишешь.
      P.S это материал из других курсов в которых эту тему расмусоливали 2 часа с примерами. Поэтому я согласен что здесь все по верхах, но для закрепления пройденного самое то!

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

    Объясняешь как БОГ!👍🏻 Все четко и понятно! а на платных курсах в злополучной «акадЭмии» ШАГ препод не мог объяснить толком зачем нужны абстрактные классы вообще и в чем их отличие от интерфейсов 😎зато постоянно ставил себя выше всех и высмеивал домашние задания… в общем небо и земля …

  • @xlebylllek321
    @xlebylllek321 11 месяцев назад

    Спасибо)

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

    Спасибо 🎉

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

    Нашел ответ на вопрос, так для чего оно надо если методы можно и так вызвать:
    Это нужно для гарантии того, что в наследуемых классах будет реализован метод с тем же названием и похожим функционалом. Например, у классов Треугольник и Круг должен быть реализован абстрактный метод get_area, который считает площадь. Иначе можно писать в одном классе area, в другом get_area, что вызывает путаницу и проблемы с поддержкой кода. Имхо, думаю это не вся суть:)

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

    Привет! Вот на твоем примере уже к концу когда ты реализовал интерфейс Abletomakesound, и забрал у него метод makesound, тогда получается нам уже не нужен абстрактный класс Animal, ведь там тот же метод, или я неправильно думаю? И второй вопрос, можем ли мы в классе dog, сразу написать что мы и реализуем интерфейс и еще расширяем класс Animal, то есть dog extends Animal and implements AbletomakeSounds?

  • @user-zb2rx3in3m
    @user-zb2rx3in3m 5 лет назад +1

    Спасибо за видео. Странно, что просмотров и комментариев совсем не много

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

    Super tnx

  • @user-vv2yg6ux7g
    @user-vv2yg6ux7g 2 года назад

    Спасибо за труд, видосик зашел. Еще бы запомнить (КАК?)

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

    КРАССССААААААААААААВЧИИИИИИИИИИИККККК

  • @user-ok2pt9zm3t
    @user-ok2pt9zm3t 2 года назад

    Добрый день, а поля абстрактного класса мы обязаны переопределить в наследующем классе? Есть разница с полями обычного класса?

  • @Anatoli-bq1pe
    @Anatoli-bq1pe 2 года назад +1

    Лайк)

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

    К примеру у нас есть абстрактный класc Animal, а так же классы Dog, Cat, Cow которые его наследуют. И вот нам потребовалось создать класс Human, например, который умеет спать (так же как и животные класса Animal). Наверно в этом случае и пригодиться интерфейс, правильно?)

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 2 года назад +1

    0:00 Классы
    6:23 Интерфейсы

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

    Thnx

  • @MrDrummerMF
    @MrDrummerMF 7 лет назад +6

    Спасибо за видео!
    Скажите пожалуйста, в чем конкретно смысл создавать абстрактный метод, если при наследовании его приходится переопределять, т.е. по сути писать его заново с конкретными значениями. Это что-то вроде напоминалки, что такой метод должен обязательно быть реализован?

    • @alishevN
      @alishevN  7 лет назад +12

      Создавая абстрактный метод мы налагаем обязательство на его реализацию всем тем, кто наследуется от нашего абстрактного класса.

  • @user-le5lq9dj8n
    @user-le5lq9dj8n 7 лет назад +1

    перфекто !!

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

    Абстрактный класс - это обобщения сущности и действий, а интерфейс - это лишь подтверждения того, что те или иные действия (методы) будут в классе? Я верно понимаю?

  • @kosheckaslobodanomiloshechka
    @kosheckaslobodanomiloshechka 7 лет назад +10

    Может ли, к примеру, класс Dog быть одновременно и extend Animal, и implements ableToMakeSound? Т.е. наследоваться и от класса Animal и реализовывать методы интерфейса одновременно?

    • @alishevN
      @alishevN  7 лет назад +16

      да, может.

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

      Как говорил великий программист(бомж Валера): "Лучше один раз попробовать, чем десять раз услышать".

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

      @@alishevN а как это оформить? я так понял,что либо наследуемся либо имплементим? а как совместить?

    • @vladMT16
      @vladMT16 3 года назад +6

      @@vadpivot public class Cat extends Animal implements MakeSound
      вот так сработало.

  • @user-md5dm1ke8m
    @user-md5dm1ke8m 2 месяца назад

    Всём Привет дошол 41 ❤❤❤❤❤❤

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

    а почему метод eat не относледовался?

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

    получается в интерфейсе мы не можем объявлять переменные ?

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

      нет, но можно константы static final

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

    Не могу вызвать метод makeSound из класса Dog из-за ошибки Non-static method 'makeSound()' cannot be referenced from a static context.

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

      public static makeSound(){}
      и посмотри видос про статик, на этом же канале

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

      Если я ставлю static, то у меня начинаются проблемы с классом Animal

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

      @@PianoElipse а ты через объект вызываешь метод ?

  • @user-fc4iv9xv1j
    @user-fc4iv9xv1j 2 года назад

    Выскажу своё определение.
    Интерфейс СВЯЗЫВАЕТ две логические единицы программы.
    Абстрактный класс ДОПОЛНЯЕТ одну или несколько логических единиц своей логикой.

  • @tsaykostya
    @tsaykostya 5 месяцев назад

    я так понял что от Абстрактных классов мы наследуем все что свойственно всем классам потомкам, а интерфейсы реализуем когда есть какие то отличительные свойства классов. т.е методы eat() и sleep() отнаследуем от класса, а fly(), sweam() от интерфеса. я правильно понял?

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

    Подскажите, могут ли быть абстрактные методы у обычного, не абстрактного класса?

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

    Резюмируя:самое главное приемущество абстрактного класа это избавление от дублирования кода (общая логика в абстрактном классе) и а разная логика реализовуеться в каждом дочернем классе.

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

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

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

      @@vadpivot програмирование это весело все понимают одинаково но обьясняют по разному :) на интервью тоже самое

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

      @@caffeinejavacode1475 о пардон похоже я не тому ответил,рука дернулась...

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

    01.07.19 Learning....

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

    Коллеги, может поясните: зачем нужен абстрактный класс если все равно в каждом наследнике надо переписывать метод. Не проще в классе родителе написать все общие одинаковые методы из серии идти, назвать и т.д., а в классе наследнике просто написать такой метод который нужно?

  • @immortal-spirit-13
    @immortal-spirit-13 4 года назад

    не понял концепт с двух раз

  • @user-rp4uc6ri4m
    @user-rp4uc6ri4m 4 месяца назад

    Я правильно понимаю что абстрактный класс создаётся только для того чтобы при наследовании от него, компилятор давал по шапке за то что ты забыл реализовать тот или иной метод?

    • @n0stamina
      @n0stamina 15 дней назад

      Я вот тоже понять не могу. Как-будто бы интерфейсы тоже для этого предназначены

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

    Вопрос только 1 - когда новые видео?

  • @antony.dmr97
    @antony.dmr97 4 года назад

    Вы говорили о том что обьект абстрактного класса нельза создать, но у меня получилось создать обьект абстрактного класа, вот таким вот образом, может я что то не правильно понял, я новичок обьясните пожалуйста.
    Animal animal= new Animal() {
    @Override
    public void makeSound() {
    }
    };

    • @antony.dmr97
      @antony.dmr97 4 года назад

      в тоже время при попытке создать обьект при помощи такой конструкции Animal animal= new Animal(); не получается

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

      Вы создали анонимный класс (Урок 35).

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

      Антон такой Антон)))
      тебя ни разу не смутила такая конструкция создания))

  • @zemlyanin1339
    @zemlyanin1339 6 лет назад +2

    Получается, абстрактные классы - это те же интерфейсы, но с частичной реализацией и без возможности множественного наследования.

    • @alishevN
      @alishevN  6 лет назад +2

      Да.

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

      В интерфейсах же есть реализация по-умолчанию. Получается, абстрактный класс отличается только невозможностью множественного наследования?

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

    Очень хорошие уроки, мне как начинающему очень понятно. Но есть такое дело...я понимаю в чём отличие класса от интерфейса, но если спросить вкратце, можно ответить так?: Интерфейс - контракт, абстрактный класс- контракт со своими условиями в виде собственных реализованных методов.

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

      Да, все верно.

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

      javaRussia спасибо)

    • @olehanfimov7438
      @olehanfimov7438 6 лет назад +42

      Нет,не верно.Если бы автор корректно описал пример с животными, то Вы бы всё правильно поняли,но похоже,что автор и сам не совсем разобрался,раз он так Вам отвечает. Абстрактный класс,как и любой другой класс является чертежом,он описывает свойства объекта.Если мы возьмем конкретно этот пример,то правильно было бы создать переменные name, age, sex,voice(имя,возраст,пол,звук) и создать в этом абстрактном классе абстрактные методы сеттеры и геттеры(позволяют установить или же вернуть эти значения) и те,которые мы потом закинули в интерфейс(makeVoice и eat).Теперь, если мы посмотрим,то все эти методы описывают вообще всех животных,которые только существуют. Переходим к интерфейсам,интерфейс(контракт) - это способность что-то делать.Для более ясного понимания создадим еще один класс Птеродактиль и два интерфейса,первый описывает умение(возможность) ходить по земле, а второй возможность летать.Теперь,все три класса Cat,Dog и Pterodactyl наследуются от Animals т.к. все три ЯВЛЯЮТСЯ животными(это, кстати проверочное слово при наследовании),а вот с интерефейсами дела обстоят по-другому кошка и собака могут ходить,но не могут летать,поэтому имплементируем только первый интерфейс,а вот птеродактиль может как ходить так и летать,поэтому тут имплементируем оба интерфейса. Мы знаем,что в джаве нет множественного наследования,как в С++,но зато мы можем имплементировать сколько угодно интерфейсов,что полностью это компенсирует(Как по мне это удобнее).И вот теперь если у нас появятся новые классы тигр,лев,рысь и воробушек,синичка,ласточка, то мы видим всю мощь полиморфизма в ООП и нам будет очень удобно описать все эти классы.

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

      Получается:
      1) абстрактный класс = что-то базовое и большое, мы должны реализовать ВСЕ абстрактные методы, это удобно когда под этот класс попадают все или почти все сущности (например создаем машины, а в абстрактном классе есть абстрактные методы wheels, maxSpeed, doors, color, name и все машины имеют эти аттрибуты, т.е. реализовать все абстрактные методы ЕСТЬ смысл)
      2) Интерфейсы = куски описания, которые не всегда пересекаются и их можно комбинировать, например нам нужно описать компьютер. Нет смысла все тулить в абстрактный класс, ведь компьютера бывают разные: ноутбук, домашний ПК, сервер, compute stick. И объекты будут иметь поля: внешний блок питания (большой ПК / сервер), Адаптер питания (ноутбук, маленький компьютер), монитор, встроенный дисплей (ноутбук), DVD-привод (у compute stick нет вообще такого) и т.д., то есть нет смысла все это пихать в абстрактный класс и потом при желании создать объект ноутбука переопределять ненужные методы типо внешнего дисплея, внешнего блока питания и большого корпуса, т.к. это ноутбук и там попросту этого нет. А вместо этого можно реализовать по отдельности интерфейсы ноутбук, домашний ПК, сервер, compute stick, которые уже будут иметь только НУЖНЫЕ методы.
      Я правильно рассуждаю?

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

      @@olehanfimov7438 package com.java.lessons.Interfeis;
      public class MAN {
      public static void main(String[] args) {
      Cat c= new Cat();
      Dog1 d=new Dog1();
      Pterodactil p=new Pterodactil();
      c.setAge(5,"Kytti","Girl","MEEEOOOOWWWW");
      d.setAge(10,"Fill","Boy","GAV GAV GAV");
      p.setAge(100,"Grasy","Boy","KARRRR");
      c.Names();c.Ages();c.Sexs();c.Sound();c.Go();c.Swim();
      d.Names();d.Ages();d.Sexs();d.Sound();d.Go();d.Swim();
      p.Names();p.Ages();p.Sexs();p.Sound();p.Fly();p.Go();p.Swim(); }}package com.java.lessons.Interfeis;
      Меня зовут Kytti
      Мне 5 лет
      я Girl
      Я MEEEOOOOWWWW
      Kytti walk
      Kytti swim
      Меня зовут Fill
      Мне 10 лет
      я Boy
      Я GAV GAV GAV
      Fil walk
      Fill Swim
      Меня зовут Grasy
      Мне 100 лет
      я Boy
      Я KARRRR
      Pterodactil is flying
      Pterodactil on the ground
      Pterodactil swim
      Process finished with exit code 0

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

    Абстрактный класс: Класс персонажа, здоровье персонажа, броня, мана
    Интерфейс: его способности, пассивные умение
    Правильно понимаю? Поправьте если нет, желательно на похожем примере. Спасибо

    • @anruslanov
      @anruslanov Год назад +3

      Если говоришь про "идейную" разницу, то можно и так сказать. Или например:
      аб.класс "Эльф": здоровье, мана, броня
      интерфейс "Живой пресонаж": ударить, похилиться, бежать, спать.
      пусть будет для примера твоего класса: эльф-мечник(это условно твой конечный класс с которым работаешь. у него там имя и возраст параметры например, а так же какие нибудь характерные методы) . он наследуется от общего абстрактного класса расы Эльф (в данном случае абстрактный класс с здоровьем маной и броней для данной фракции). и соответственно твой эльф-мечник реализуем интерфейс "живой персонаж", где прописано что может (А вернее обязан уметь) делать твой эльф-мечник.
      если спросить: Зачем нужен абстрактный класс? Затем, что если ты условно захотел создать себе Эльфа-лучника, то он всё равно будет являться по своей расе Эльфом. И для него не придётся описывать эльфиские параметры. Достаточно чтобы и Эльф-мечник и Эльф-лучник наследовались от абстрактного класса "эльф". Ведь у каждого эльфа есть общие характеристики.
      если спросить: Зачем нужен интерфейс? Чтобы понимать что может делать любой персонаж в игре в принципе. Например, этот же интерфейс могут реализовывать и друге расы: Гномы, Люди, Орки и т.д.

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

      @@anruslanov огромное человеческое спасибо)

  • @user-do7dv4kd2g
    @user-do7dv4kd2g 4 года назад +7

    НИХ*Я не понял..но очень интересно

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

    Опишите использование полей(не статических и статических) в абстрактном классе и интерфейсе.

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

      В абстрактном классе можно объявить статические и не статические поля, в интерфейсах только константы.

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

      Кешан
      "только константы"

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

    Каждый второй пишет, что ему все понято, верю ))). Автору поклон за труд, но по ощущениям тема не раскрыта, примеры слабоваты. Это первый урок, который я пропускаю.

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

    так в интерфейсе можно же реализовать те методы, где они будут для всех. +имплиментить можно сколько хочешь, а экстендить только одного. Мне кажется абстрактные методы - устаревшее явление.

    • @Klimpton
      @Klimpton 2 года назад +2

      ну а как ты в интерфейсе тогда поля будешь задавать? например имя или возраст )

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

    Блин все равно не понял. Интерфейс это контракт который обязывает реализовать имплементириующие классы все методы которые находятся в интерфейсе. А асбтрактный класс че то не втюрился... Больше похоже на "Вы не понимаете, это другое")))

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

      Каковы различия между абстрактным классом и интерфейсом в Java?
      *Интерфейс описывает только поведение (методы) объекта, а вот состояний (полей) у него нет (кроме public static final), в то время как у абстрактного класса они могут быть. private переменные не создашь в виде полей, потому что геттеры и сеттеры к ним не опишешь.
      *Абстрактный класс наследуется (extends), а интерфейс - реализуется (implements). Мы можем наследовать только один класс, а реализовать интерфейсов - сколько угодно (Наследование - одно уровневое, Реализация - многоуровневая). Интерфейс может наследовать (extends) другой интерфейс/интерфейсы, но не КЛАССЫ, это запрещено компилятором!
      *Абстрактные классы используются, когда есть отношение "is-a", то есть класс-наследник расширяет базовый абстрактный класс, а интерфейсы могут быть реализованы разными классами, вовсе не связанными друг с другом.

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

    Возникло несколько вопросов:
    Может ли абстрактный класс реализовывать интерфейс?
    Может ли класс потомок реализовывать отличный от родительского класса интерфейс или только те что прописаны у предка?
    Может ли класс одновременно extends и implements?

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

    Ничего не сказано про поля абстрактного класса, поэтому имхо столько непонимания в камментах

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

    2:23 доуя абстрактный штоле?!

  • @user-ss9oi9cn9o
    @user-ss9oi9cn9o 9 месяцев назад +1

    ох уж этот кринжовый акцент со словом ЭБСТРАКТ я больше не можу

  • @user-kk4wk2di7x
    @user-kk4wk2di7x 4 месяца назад

    Вообще ниче не понятно, пересмотрел раз 10, исходя из урока только 1 вывод- интерфейсы и абстрактные классы это тож самое, просто если тебе надо чтобы были реализованы все методы- выбирай интерфейс, если тебе надо чтобы было реализовано много методов , но не все, можешь использовать абстрактные класс

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

    не фига не понятно

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

    материал прям ерунда и про интерффейсы прям тупые реализациии, сам не понимаеш и других не путай.
    Поищите еще что в инете, про интерфейс,не забивайте голову... не слушайте про контракт, он в ушах плеш проел .
    , но так тяжело слушать этот "а ля бритиш акцент", на хрена он нужен? этот "аабшштээракт", если другие слова тупа рубиш по русскому акценту class-класс , animals -анималс.
    или этот ." interface" -интерфейс... ,а почему не "Энтэрфайсзе"... - или не "Иинтэ файcе" как есть правильно )))
    икстати и у них abstract - и произносится "абстракт".

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

      Ха-ха

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

      Вот это у тебя бомбит, малыш =D

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil 2 года назад +3

      ну пользы от твоего коммента ноль
      "поищите еще что в инете" - то что доктор прописал

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

    Спасибо!

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

    Спасибо!