Абстрактные классы и интерфейсы в Java - не одно и то же!

Поділитися
Вставка
  • Опубліковано 29 лис 2024

КОМЕНТАРІ • 39

  • @AngelCheater
    @AngelCheater 7 місяців тому +5

    В интерфейсе могут быть поля, но они по умолчанию public static final - то есть константы. А так отличное объяснение!

  • @akberendarhankyzy1075
    @akberendarhankyzy1075 8 місяців тому +5

    Вы очень хорошо объясняете. Пожалуйста выпускайте больше видео про ООП.

  • @arven4430
    @arven4430 Рік тому +3

    "программисты - староверы" ахаха 😄. За вставку с газ 66 отдельный респект

  • @_vist
    @_vist Рік тому +4

    Посмотрел несколько видео на эту тему, у вас самое понятное объяснение!!! 👍🤝

  • @МаксимС-у4и
    @МаксимС-у4и 5 місяців тому +4

    классно объясняете, жаль больше нет видео на канале

  • @ЕкатеринаТитова-д1с

    Спасибо за урок! Легко объясняете! Давайте по возможности больше уроков!

  • @Noyvel
    @Noyvel Рік тому +3

    Огромное спасибо за Ваш труд. Снимайте пожалуйста больше видео.

  • @johnconnor3553
    @johnconnor3553 Рік тому +1

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

  • @pabloescobar-us1kl
    @pabloescobar-us1kl 7 місяців тому

    Классное объяснение, рад тому что натолкнулся на данное видео

  • @user-tm3uz6ij8t
    @user-tm3uz6ij8t Рік тому +3

    Еще есть такой момент: у интерфейса все его методы public. Соответственно, реализованные методы интерфейса в классе всегда будут public. То есть, эти методы можно гарантированно вызывать из других классов. И это часть контракта.
    А вот при наследовании у переопределенного метода модификатор доступа необязательно может быть public.

    • @ИгорьМешалкин-ж7ф
      @ИгорьМешалкин-ж7ф  Рік тому +8

      Очень ценное замечание, спасибо. Поправлю только в том что в современной Java (начиная с Java 9) реализована возможность присвоения модификатора private методам интерфейса, но с некоторыми ограничениями. Эти методы могут использоваться только внутри самого интерфейса. То есть к ним неприменимо понятие default т.к. они в любом случае не переопределяются в классах реализующих данный интерфейс. Так же они могут быть статичными, если используются в статичных методах интерфейса.
      Я счёл что эти подробности перегрузят видео цель которого помочь разобраться в разнице между абстрактными классами интерфейсами. Но я согласен с вами что эта тема тоже заслуживает внимания.

  • @ЕлизаветаМешалкина

    Очень хорошая подача материала, спасибо! Снимайте ещё ❤

  • @09Vanek
    @09Vanek Рік тому

    Слушай Игорь!
    Вот ты просто красавчик!!!👏👏👏

  • @ЖумакановНурмухаммед

    все понятно и просто обьяснил ,жду следующие видео

  • @Biforzz
    @Biforzz Рік тому +2

    тернарные операторы нужны. Еще интересно про дженерики

  • @roottor
    @roottor Рік тому

    Все отлично - спасибо !!!

  • @irinaresetnicova4583
    @irinaresetnicova4583 8 місяців тому

    Почему нет новых видео? Очень хорошо объясняете)

  • @zexceed8880
    @zexceed8880 5 місяців тому

    Надеюсь вернётесь на ютуб снимать видосы

  • @hsjsudve837d
    @hsjsudve837d Рік тому +1

    отличия:
    1) абстрактные классы содержат логику реализации, интерфейсы только обещают, что классы которые заимплементируют данный интерфейс обязуются эту логику реализовать
    2) интерфейсов может быть множество заимплементированно, однако наследование может быть только единственным
    3) модификаторы доступа в интрфейсе только паблик по понятным причинам(так как мы не реализовываем логику в интерфейсах), однако в абстрактном классе может быть сколько угодно приватных методов чтобы в конечном счёте для потомков и так дать доступ к паблику который реализовывает возложенную на данный класс задачу
    вот основные отличия

    • @ИгорьМешалкин-ж7ф
      @ИгорьМешалкин-ж7ф  Рік тому

      Всё верно кроме п.3 в Java 9+ итерфейсы могут иметь приватные методы с реализацией.

  • @user-tm3uz6ij8t
    @user-tm3uz6ij8t Рік тому

    21:45 Хм, я раньше думал, что если на объект Car будет ссылаться переменная типа интерфейса Transportable, то "полем видимости" этой переменной будут только реализованные методы интерфейса Transportable. Другие же методы и поля класса Car будут вне видимости.
    Но оказывается, если переменные класса Car подсовывать в методы интерфейса Transportable, то они там 'засвечиваются'.

    • @ИгорьМешалкин-ж7ф
      @ИгорьМешалкин-ж7ф  Рік тому

      Поведение переменной определяется тем какой объект в неё положили. А что вы имеете в виду когда говорите "засвечиваются"?

    • @user-tm3uz6ij8t
      @user-tm3uz6ij8t Рік тому

      Я имею в виду, что переменная car типа данных Transportable "смотрит" на объект new Car(......) как бы через трафарет, который скрывает от этой переменной собственные поля и методы класса Car, а даёт видеть только методы предоставленные интерфейсом Transportable.
      Однако, если в реализацию метода go() включить поле name или вызвать какой-нибудь метод класса Car (если бы они там были), то их присутствие проявляется(!).
      Но напрямую такие вызовы для переменной Transportable не сработают:
      car. name; //даже в случае с public
      car. openDoor(); // метод класса Car

    • @ИгорьМешалкин-ж7ф
      @ИгорьМешалкин-ж7ф  Рік тому

      @@user-tm3uz6ij8t никакого трафарета нет. Как и нет никакой разницы как объявить переменную. Независимо от того, объявлю я переменную как Car car ... , Transporable car ... или любым другим абстрактным классом или интерфейсом, содержаться в этой переменной будет то что написано в правой части выражения, а именно ... new Car() - и именно это будет определять какие поля и методы есть у переменной. То есть в любом случае данный объект будет видеть всё что есть в классе Car, все поля и все методы, переопределённые или объявленные в классе Car разницы нет.
      Проще говоря эта переменная будет содержать в себе new Car() независимо от того как она объявлена.

    • @alenache1
      @alenache1 Рік тому +2

      @@ИгорьМешалкин-ж7ф человек имел ввиду, что апкастинг накладывает ограничения на доступ в коде к полям и методам, отсутствующим в интерфейсе. Компилятор просто не даст вам к ним обратиться.

  • @Rommel7755
    @Rommel7755 10 місяців тому

    Веселое видео. Автор говорит, что интерфейс отвечает за поведение и тут же прячет за него класс машина. И опять 25. На само деле машина должна быть либо абстрактным классом либо реализующим абстрактный класс а за интерфейсом классы с имплементацией в данном случае от Transportable, например TransByTrain, TransbyShip. т.е каким образом производится действие перемещение, доставка и т.п. Потом ссылка на интерфейс прописывается в абстрактном классе. А все вместе это будет называться паттерн проектирования «стратегия».

  • @ilgistoktogulov7270
    @ilgistoktogulov7270 Рік тому

    обьяснение по принципу KISS. Просто класс?

  • @clannajebyan
    @clannajebyan Рік тому

    У вас VS, получается, вы еще на C# или C++ программируете?

    • @ИгорьМешалкин-ж7ф
      @ИгорьМешалкин-ж7ф  Рік тому +1

      На C# да. На моей текущей работе это необходимо.

    • @clannajebyan
      @clannajebyan Рік тому

      @@ИгорьМешалкин-ж7ф классно. моя мечта была перейти на C#, но материалов практически ноль, хоть на англ, хоть на рус. Я живу в Америке и тут очень популярен C#.

    • @ИгорьМешалкин-ж7ф
      @ИгорьМешалкин-ж7ф  Рік тому

      @@clannajebyan к сожалению я вам тоже вряд ли помогу в его освоении т.к. сам осваиваю его на ходу. Моя с ним работа заключается в обслуживании чужого кода, иногда написании макросов, ну и пару небольших REST API написал. Правда на чистом C# без фреймворков т.к. как вы правильно сказали материалов очень мало по нему.

    • @clannajebyan
      @clannajebyan Рік тому

      @@ИгорьМешалкин-ж7ф ну что вы, вы же не Джин - исполнитель желаний))) на чистом - это вообще шикарно🙂Засеньйорюсь в Java и пойду вас догонять по C# 😀

    • @ИгорьМешалкин-ж7ф
      @ИгорьМешалкин-ж7ф  Рік тому +1

      @@clannajebyan Отличный план. После Java остальные языки кажутся простыми. (кроме C++)))

  • @alenache1
    @alenache1 Рік тому

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

  • @_vist
    @_vist Рік тому

    Посмотрел несколько видео на эту тему, у вас самое понятное объяснение!!! 👍🤝