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

  Рет қаралды 101,906

alishev

alishev

7 жыл бұрын

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

Пікірлер: 150
@alishevN
@alishevN 6 жыл бұрын
Регистрируйтесь на курс "Продвинутая Java": kzbin.info/www/bejne/qIPIYqmKZbh3epo Практикуйтесь в написании Java кода: java-marathon.tilda.ws
@pertshgalstyan6189
@pertshgalstyan6189 6 жыл бұрын
почти никогда не пишу комментарии но брат преогромное спасибо тебе. очень четко понятно и эффективно для начинающих. спасибо тебе за то растраченное время который ты подарил яве и всем новичкам.
@dontknowwhattotypelo
@dontknowwhattotypelo 5 жыл бұрын
Получается: 1) абстрактный класс = что-то базовое и большое, мы должны реализовать ВСЕ абстрактные методы, это удобно когда под этот класс попадают все или почти все сущности (например создаем машины, а в абстрактном классе есть абстрактные методы wheels, maxSpeed, doors, color, name и все машины имеют эти аттрибуты, т.е. реализовать все абстрактные методы ЕСТЬ смысл) 2) Интерфейсы = куски описания, которые не всегда пересекаются и их можно комбинировать, например нам нужно описать компьютер. Нет смысла все тулить в абстрактный класс, ведь компьютера бывают разные: ноутбук, домашний ПК, сервер, compute stick. И объекты будут иметь поля: внешний блок питания (большой ПК / сервер), Адаптер питания (ноутбук, маленький компьютер), монитор, встроенный дисплей (ноутбук), DVD-привод (у compute stick нет вообще такого) и т.д., то есть нет смысла все это пихать в абстрактный класс и потом при желании создать объект ноутбука переопределять ненужные методы типо внешнего дисплея, внешнего блока питания и большого корпуса, т.к. это ноутбук и там попросту этого нет. А вместо этого можно реализовать по отдельности интерфейсы ноутбук, домашний ПК, сервер, compute stick, которые уже будут иметь только НУЖНЫЕ методы. Я правильно рассуждаю?
@alishevN
@alishevN 5 жыл бұрын
Все правильно! Хорошие аналогии.
@nod745
@nod745 5 жыл бұрын
Если я правильно понимаю, то интерфейс описывает то, что класс будет уметь делать =)) В вашей аналогии ноутбук, домашний ПК и т.д - это не интерфейсы, а сущности. Отсюда логичнее было бы сделать абстрактный класс Computer и от него создавать конкретные классы наследники Notebook, Compute Stick. Прошло 8 месяцев, но все же =)))
@alexlukhanin
@alexlukhanin 4 жыл бұрын
хочу уточнить и добавить: " а в абстрактном классе есть абстрактные методы 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 жыл бұрын
@@vladimirplohotniuk5214 представь, что у тебя код игры и в нем есть 150-200 персонажей, каждому нужен набор данных, внешность, поведение, класс, раса и т. д., если ты каждому персонажа будешь иплементить по 20 интерфейсов, это не очень удобно
@Artem_35_
@Artem_35_ 5 жыл бұрын
Никогда не устану говорить вам спасибо, за такие простые и лаконичные объяснения казалось бы не самых простых идей!
@mikhailochkaev2454
@mikhailochkaev2454 2 жыл бұрын
Я с таким наслаждением и без особых усилий еще никогда не приобретал новые знания, все благодаря грамотной подаче материала👍
@yegorivanov3006
@yegorivanov3006 4 жыл бұрын
От видео к видео понимаю, что ещё не всё потеряно и смена сферы деятельности - реальность! Спасибо! Пока не могу отплатить большим чем коммент и лайк, поэтому вот!
@Nidvoraich
@Nidvoraich 3 жыл бұрын
В колокол позвони :)
@feliksbekeshov7668
@feliksbekeshov7668 2 жыл бұрын
Интересно , спустя год узнать чем ты сейчас занимаешься? получил ли ты свою первую работы в сфере айти? Если да то поздравляю
@user-zy7ix8lf1f
@user-zy7ix8lf1f Жыл бұрын
@@feliksbekeshov7668 а ты кемто стал за год?(просто интересно, сейчас 2 месяц учусь)
@feliksbekeshov7668
@feliksbekeshov7668 Жыл бұрын
@@user-zy7ix8lf1f привет, да уже работаю разработчиком
@samirbagamaev93
@samirbagamaev93 Жыл бұрын
@@feliksbekeshov7668 красава
@speksi1504
@speksi1504 Жыл бұрын
Долго не понимала тему абстрактные классы, а после просмотра видео сразу стало все на свои места. Спасибо!
@kladmonet9
@kladmonet9 3 жыл бұрын
Всё по полочкам! Благодарю за инфу. Даже решил кое-что законспектирвоать!
@r0d1oN
@r0d1oN 4 жыл бұрын
Однозначно лайк. Ты просто мега-доступно объясняешь. Огромное спасибо) Протолкнул меня на множество просветлений в джаве))
@charlesdarwin6087
@charlesdarwin6087 2 жыл бұрын
Спасибо за понятные и наглядные объяснения, почти всегда начинаю изучение темы с просмотра вашего видео. Возможно, иногда рассматриваются не все глубинные аспекты и тонкости, но после выработки полноценного понимая сути той или иной конструкции - можно спокойно это понимание расширять различными тонкостями и подробностями. Для выработки этого понимания, на мой взгляд, лучший канал и в принципе источник информации в русскоязычном сегменте 👍
@user-xs4cs6nn3g
@user-xs4cs6nn3g 6 жыл бұрын
Автор, огромное спасибо вам! Все очень понятно объясняете. Очень ждем нового приближающегося курса:3
@okeygoogle3188
@okeygoogle3188 9 ай бұрын
За это и люблю программирование. Ролику 6 лет! А он до сих пор лучше всего, что я видел по этой теме до этого. Спасибо огромное. Вы делаете жизнь тысячи начинающих программистов проще.
@TarikBat
@TarikBat Жыл бұрын
Как все таки доходчиво ты объясняешь!!! Спасибо!!!
@user-rl1hs3jf7l
@user-rl1hs3jf7l 3 жыл бұрын
СПАСИБО ОГРОМНОЕ! Я ОЧЕНЬ ДОЛГО НЕ МОГ ПОНЯТЬ КАК ОТЛИЧАЮТСЯ Абстрактный класс и интерфейс! Здесь я понял всё и сразу! Спасибо большое! Очень часто ты объясняешь то, чего нет нигде, и без чего было-бы сложно обойтись! Очень тебе благодарен. Ещё раз огромное спасибо!
@sereda206
@sereda206 6 жыл бұрын
Редко когда пишу комментарии, но твои видео просто супер, помогают в обучении. Спасибо огромное
@olegbulat2628
@olegbulat2628 5 жыл бұрын
Ну просто всё разжевал досконально. Спасибо!!!
@user-rz9nr2bg3u
@user-rz9nr2bg3u 4 жыл бұрын
Большое спасибо! Все по полочкам.
@strannikkraya1530
@strannikkraya1530 7 жыл бұрын
Отличный канал! Всё понятно. Спасибо.
@alishevN
@alishevN 7 жыл бұрын
Пожалуйста :)
@user-fl6wu9tl8l
@user-fl6wu9tl8l 3 жыл бұрын
Спасибо большое за ваш труд!
@user-fk7jl4ht1c
@user-fk7jl4ht1c 5 жыл бұрын
Классно объяснил, спасибо большое тебе.
@TC_IVA
@TC_IVA 2 жыл бұрын
Спасибо большое. Понятно всё объяснил
@SicilyRain
@SicilyRain 3 жыл бұрын
Спасибо! Юзаю информацию для подготовки к экзамену по программированию в Германии :)
@Shorts-ut2xb
@Shorts-ut2xb 2 жыл бұрын
автор просто настоящее золото разжевал то что я месяц не мог понять
@roman_akbashev
@roman_akbashev 6 жыл бұрын
Урок хороший, но тут ничего не сказано про то, что абстрактные классы можно использовать для того что бы не реализовывать все методы интерфейса. Т.е. : 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 жыл бұрын
Если далее наследоваться от абстрактного класса, то все равно нужно будет реализовать методы интерфейса
@maxkatrenko8865
@maxkatrenko8865 3 жыл бұрын
​@@user-ut3dp7er3j если в интерфейсе прописать default поведение метода, то его не обязательно реализовывать ( java 8+) в в классе, который имплементирует этот интерфейс
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
@@maxkatrenko8865 ну говорят то про другую особенность
@juliajulia2081
@juliajulia2081 2 жыл бұрын
Объясняешь как БОГ!👍🏻 Все четко и понятно! а на платных курсах в злополучной «акадЭмии» ШАГ препод не мог объяснить толком зачем нужны абстрактные классы вообще и в чем их отличие от интерфейсов 😎зато постоянно ставил себя выше всех и высмеивал домашние задания… в общем небо и земля …
@palatense6584
@palatense6584 7 жыл бұрын
Спасибо огромное!
@mrnobody9369
@mrnobody9369 4 жыл бұрын
Привет! Вот на твоем примере уже к концу когда ты реализовал интерфейс Abletomakesound, и забрал у него метод makesound, тогда получается нам уже не нужен абстрактный класс Animal, ведь там тот же метод, или я неправильно думаю? И второй вопрос, можем ли мы в классе dog, сразу написать что мы и реализуем интерфейс и еще расширяем класс Animal, то есть dog extends Animal and implements AbletomakeSounds?
@user-yr5vo3um6y
@user-yr5vo3um6y Жыл бұрын
Хороший выпуск🔥
@pascha9141
@pascha9141 3 жыл бұрын
Хорош. Аплодирую стоя!
@kogaro8762
@kogaro8762 7 жыл бұрын
Спасибо за урок)
@alishevN
@alishevN 7 жыл бұрын
Пожалуйста!
@solar9238
@solar9238 2 жыл бұрын
Нашел ответ на вопрос, так для чего оно надо если методы можно и так вызвать: Это нужно для гарантии того, что в наследуемых классах будет реализован метод с тем же названием и похожим функционалом. Например, у классов Треугольник и Круг должен быть реализован абстрактный метод get_area, который считает площадь. Иначе можно писать в одном классе area, в другом get_area, что вызывает путаницу и проблемы с поддержкой кода. Имхо, думаю это не вся суть:)
@user-vj5fv6rv5u
@user-vj5fv6rv5u 6 ай бұрын
Спасибо большое
@grobovshikov
@grobovshikov 3 жыл бұрын
Блин, это круто и гениально.
@C2H5OHH
@C2H5OHH 2 жыл бұрын
Спасибо!
@user-ok2pt9zm3t
@user-ok2pt9zm3t 2 жыл бұрын
Добрый день, а поля абстрактного класса мы обязаны переопределить в наследующем классе? Есть разница с полями обычного класса?
@pate2418
@pate2418 Жыл бұрын
Супер понятно!
@Andrzej3935
@Andrzej3935 2 жыл бұрын
Здорово!
@andreydmitriyev4582
@andreydmitriyev4582 3 жыл бұрын
Мое почтение!
@TierStar1994
@TierStar1994 3 жыл бұрын
К примеру у нас есть абстрактный класc Animal, а так же классы Dog, Cat, Cow которые его наследуют. И вот нам потребовалось создать класс Human, например, который умеет спать (так же как и животные класса Animal). Наверно в этом случае и пригодиться интерфейс, правильно?)
@xlebylllek321
@xlebylllek321 10 ай бұрын
Спасибо)
@Devivl
@Devivl Жыл бұрын
Спасибо 🎉
@kosheckaslobodanomiloshechka
@kosheckaslobodanomiloshechka 7 жыл бұрын
Может ли, к примеру, класс Dog быть одновременно и extend Animal, и implements ableToMakeSound? Т.е. наследоваться и от класса Animal и реализовывать методы интерфейса одновременно?
@alishevN
@alishevN 7 жыл бұрын
да, может.
@gleb_bro8710
@gleb_bro8710 4 жыл бұрын
Как говорил великий программист(бомж Валера): "Лучше один раз попробовать, чем десять раз услышать".
@vadpivot
@vadpivot 3 жыл бұрын
@@alishevN а как это оформить? я так понял,что либо наследуемся либо имплементим? а как совместить?
@vladMT16
@vladMT16 3 жыл бұрын
@@vadpivot public class Cat extends Animal implements MakeSound вот так сработало.
@maksymmax8028
@maksymmax8028 2 жыл бұрын
Спасибо за работу. Доступно, но поверхностно. Это маме посмотреть чем сын весь день занят))
@magellan127
@magellan127 11 ай бұрын
@@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 часа с примерами. Поэтому я согласен что здесь все по верхах, но для закрепления пройденного самое то!
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
0:00 Классы 6:23 Интерфейсы
@lacuna543
@lacuna543 5 жыл бұрын
Абстрактный класс - это обобщения сущности и действий, а интерфейс - это лишь подтверждения того, что те или иные действия (методы) будут в классе? Я верно понимаю?
@MrDrummerMF
@MrDrummerMF 7 жыл бұрын
Спасибо за видео! Скажите пожалуйста, в чем конкретно смысл создавать абстрактный метод, если при наследовании его приходится переопределять, т.е. по сути писать его заново с конкретными значениями. Это что-то вроде напоминалки, что такой метод должен обязательно быть реализован?
@alishevN
@alishevN 7 жыл бұрын
Создавая абстрактный метод мы налагаем обязательство на его реализацию всем тем, кто наследуется от нашего абстрактного класса.
@user-zb2rx3in3m
@user-zb2rx3in3m 5 жыл бұрын
Спасибо за видео. Странно, что просмотров и комментариев совсем не много
@looneytoons2006
@looneytoons2006 6 жыл бұрын
Super tnx
@user-vv2yg6ux7g
@user-vv2yg6ux7g 2 жыл бұрын
Спасибо за труд, видосик зашел. Еще бы запомнить (КАК?)
@rfak05
@rfak05 2 жыл бұрын
Thnx
@user-rp4uc6ri4m
@user-rp4uc6ri4m 3 ай бұрын
Я правильно понимаю что абстрактный класс создаётся только для того чтобы при наследовании от него, компилятор давал по шапке за то что ты забыл реализовать тот или иной метод?
@artem5451
@artem5451 2 жыл бұрын
а почему метод eat не относледовался?
@user-up6my6ne1h
@user-up6my6ne1h Жыл бұрын
Подскажите, могут ли быть абстрактные методы у обычного, не абстрактного класса?
@sayonarakira790
@sayonarakira790 Жыл бұрын
Нет
@Anatoli-bq1pe
@Anatoli-bq1pe Жыл бұрын
Лайк)
@samirbagamaev93
@samirbagamaev93 Жыл бұрын
КРАССССААААААААААААВЧИИИИИИИИИИИККККК
@PianoElipse
@PianoElipse 5 жыл бұрын
Не могу вызвать метод makeSound из класса Dog из-за ошибки Non-static method 'makeSound()' cannot be referenced from a static context.
@Slipstream666
@Slipstream666 5 жыл бұрын
public static makeSound(){} и посмотри видос про статик, на этом же канале
@PianoElipse
@PianoElipse 5 жыл бұрын
Если я ставлю static, то у меня начинаются проблемы с классом Animal
@Slipstream666
@Slipstream666 5 жыл бұрын
@@PianoElipse а ты через объект вызываешь метод ?
@DagestanShop
@DagestanShop 4 жыл бұрын
получается в интерфейсе мы не можем объявлять переменные ?
@kokkivideo
@kokkivideo 4 жыл бұрын
нет, но можно константы static final
@user-le5lq9dj8n
@user-le5lq9dj8n 7 жыл бұрын
перфекто !!
@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 жыл бұрын
Вы создали анонимный класс (Урок 35).
@marinavolyk7584
@marinavolyk7584 3 жыл бұрын
Антон такой Антон))) тебя ни разу не смутила такая конструкция создания))
@tsaykostya
@tsaykostya 4 ай бұрын
я так понял что от Абстрактных классов мы наследуем все что свойственно всем классам потомкам, а интерфейсы реализуем когда есть какие то отличительные свойства классов. т.е методы eat() и sleep() отнаследуем от класса, а fly(), sweam() от интерфеса. я правильно понял?
@user-fc4iv9xv1j
@user-fc4iv9xv1j 2 жыл бұрын
Выскажу своё определение. Интерфейс СВЯЗЫВАЕТ две логические единицы программы. Абстрактный класс ДОПОЛНЯЕТ одну или несколько логических единиц своей логикой.
@ignativlev7454
@ignativlev7454 Жыл бұрын
Коллеги, может поясните: зачем нужен абстрактный класс если все равно в каждом наследнике надо переписывать метод. Не проще в классе родителе написать все общие одинаковые методы из серии идти, назвать и т.д., а в классе наследнике просто написать такой метод который нужно?
@user-md5dm1ke8m
@user-md5dm1ke8m Ай бұрын
Всём Привет дошол 41 ❤❤❤❤❤❤
@caffeinejavacode1475
@caffeinejavacode1475 3 жыл бұрын
Резюмируя:самое главное приемущество абстрактного класа это избавление от дублирования кода (общая логика в абстрактном классе) и а разная логика реализовуеться в каждом дочернем классе.
@vadpivot
@vadpivot 3 жыл бұрын
наоборот,реализуешь в наследнике и реализация разная,только вызов одинаков...вот он не упомянул как наследовать и имплементить одновременно
@caffeinejavacode1475
@caffeinejavacode1475 3 жыл бұрын
@@vadpivot програмирование это весело все понимают одинаково но обьясняют по разному :) на интервью тоже самое
@vadpivot
@vadpivot 3 жыл бұрын
@@caffeinejavacode1475 о пардон похоже я не тому ответил,рука дернулась...
@Daym0nd
@Daym0nd Жыл бұрын
Абстрактный класс: Класс персонажа, здоровье персонажа, броня, мана Интерфейс: его способности, пассивные умение Правильно понимаю? Поправьте если нет, желательно на похожем примере. Спасибо
@anruslanov
@anruslanov Жыл бұрын
Если говоришь про "идейную" разницу, то можно и так сказать. Или например: аб.класс "Эльф": здоровье, мана, броня интерфейс "Живой пресонаж": ударить, похилиться, бежать, спать. пусть будет для примера твоего класса: эльф-мечник(это условно твой конечный класс с которым работаешь. у него там имя и возраст параметры например, а так же какие нибудь характерные методы) . он наследуется от общего абстрактного класса расы Эльф (в данном случае абстрактный класс с здоровьем маной и броней для данной фракции). и соответственно твой эльф-мечник реализуем интерфейс "живой персонаж", где прописано что может (А вернее обязан уметь) делать твой эльф-мечник. если спросить: Зачем нужен абстрактный класс? Затем, что если ты условно захотел создать себе Эльфа-лучника, то он всё равно будет являться по своей расе Эльфом. И для него не придётся описывать эльфиские параметры. Достаточно чтобы и Эльф-мечник и Эльф-лучник наследовались от абстрактного класса "эльф". Ведь у каждого эльфа есть общие характеристики. если спросить: Зачем нужен интерфейс? Чтобы понимать что может делать любой персонаж в игре в принципе. Например, этот же интерфейс могут реализовывать и друге расы: Гномы, Люди, Орки и т.д.
@Daym0nd
@Daym0nd Жыл бұрын
@@anruslanov огромное человеческое спасибо)
@immortal-spirit-13
@immortal-spirit-13 4 жыл бұрын
не понял концепт с двух раз
@hikmatasgarli7036
@hikmatasgarli7036 4 жыл бұрын
01.07.19 Learning....
@rvrsme
@rvrsme 7 жыл бұрын
Очень хорошие уроки, мне как начинающему очень понятно. Но есть такое дело...я понимаю в чём отличие класса от интерфейса, но если спросить вкратце, можно ответить так?: Интерфейс - контракт, абстрактный класс- контракт со своими условиями в виде собственных реализованных методов.
@alishevN
@alishevN 7 жыл бұрын
Да, все верно.
@rvrsme
@rvrsme 7 жыл бұрын
javaRussia спасибо)
@olehanfimov7438
@olehanfimov7438 6 жыл бұрын
Нет,не верно.Если бы автор корректно описал пример с животными, то Вы бы всё правильно поняли,но похоже,что автор и сам не совсем разобрался,раз он так Вам отвечает. Абстрактный класс,как и любой другой класс является чертежом,он описывает свойства объекта.Если мы возьмем конкретно этот пример,то правильно было бы создать переменные 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
@anjelomanoranjan3908
@anjelomanoranjan3908 9 ай бұрын
Вопрос только 1 - когда новые видео?
@zemlyanin1339
@zemlyanin1339 6 жыл бұрын
Получается, абстрактные классы - это те же интерфейсы, но с частичной реализацией и без возможности множественного наследования.
@alishevN
@alishevN 6 жыл бұрын
Да.
@user-rt8ct7li5x
@user-rt8ct7li5x 4 жыл бұрын
В интерфейсах же есть реализация по-умолчанию. Получается, абстрактный класс отличается только невозможностью множественного наследования?
@Egorkom
@Egorkom Жыл бұрын
Возникло несколько вопросов: Может ли абстрактный класс реализовывать интерфейс? Может ли класс потомок реализовывать отличный от родительского класса интерфейс или только те что прописаны у предка? Может ли класс одновременно extends и implements?
@user-do7dv4kd2g
@user-do7dv4kd2g 4 жыл бұрын
НИХ*Я не понял..но очень интересно
@NiflheimForever
@NiflheimForever 3 жыл бұрын
Как успехи?
@agweprint27
@agweprint27 3 жыл бұрын
так в интерфейсе можно же реализовать те методы, где они будут для всех. +имплиментить можно сколько хочешь, а экстендить только одного. Мне кажется абстрактные методы - устаревшее явление.
@Klimpton
@Klimpton 2 жыл бұрын
ну а как ты в интерфейсе тогда поля будешь задавать? например имя или возраст )
@DolphinArtem
@DolphinArtem 2 жыл бұрын
Каждый второй пишет, что ему все понято, верю ))). Автору поклон за труд, но по ощущениям тема не раскрыта, примеры слабоваты. Это первый урок, который я пропускаю.
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
как именно ты его пропускашь?
@Molot502
@Molot502 6 жыл бұрын
Опишите использование полей(не статических и статических) в абстрактном классе и интерфейсе.
@kokkivideo
@kokkivideo 4 жыл бұрын
В абстрактном классе можно объявить статические и не статические поля, в интерфейсах только константы.
@manOfPlanetEarth
@manOfPlanetEarth 3 жыл бұрын
Кешан "только константы"
@ammdli771
@ammdli771 2 жыл бұрын
Блин все равно не понял. Интерфейс это контракт который обязывает реализовать имплементириующие классы все методы которые находятся в интерфейсе. А асбтрактный класс че то не втюрился... Больше похоже на "Вы не понимаете, это другое")))
@magellan127
@magellan127 11 ай бұрын
Каковы различия между абстрактным классом и интерфейсом в Java? *Интерфейс описывает только поведение (методы) объекта, а вот состояний (полей) у него нет (кроме public static final), в то время как у абстрактного класса они могут быть. private переменные не создашь в виде полей, потому что геттеры и сеттеры к ним не опишешь. *Абстрактный класс наследуется (extends), а интерфейс - реализуется (implements). Мы можем наследовать только один класс, а реализовать интерфейсов - сколько угодно (Наследование - одно уровневое, Реализация - многоуровневая). Интерфейс может наследовать (extends) другой интерфейс/интерфейсы, но не КЛАССЫ, это запрещено компилятором! *Абстрактные классы используются, когда есть отношение "is-a", то есть класс-наследник расширяет базовый абстрактный класс, а интерфейсы могут быть реализованы разными классами, вовсе не связанными друг с другом.
@user-ss9oi9cn9o
@user-ss9oi9cn9o 8 ай бұрын
ох уж этот кринжовый акцент со словом ЭБСТРАКТ я больше не можу
@mabutatv
@mabutatv 3 жыл бұрын
Ничего не сказано про поля абстрактного класса, поэтому имхо столько непонимания в камментах
@y9maly
@y9maly 2 жыл бұрын
2:23 доуя абстрактный штоле?!
@user-kk4wk2di7x
@user-kk4wk2di7x 3 ай бұрын
Вообще ниче не понятно, пересмотрел раз 10, исходя из урока только 1 вывод- интерфейсы и абстрактные классы это тож самое, просто если тебе надо чтобы были реализованы все методы- выбирай интерфейс, если тебе надо чтобы было реализовано много методов , но не все, можешь использовать абстрактные класс
@salakhudinov9162
@salakhudinov9162 3 жыл бұрын
не фига не понятно
@alessandrostepanov2145
@alessandrostepanov2145 3 жыл бұрын
))))
@faizulla5838
@faizulla5838 2 жыл бұрын
материал прям ерунда и про интерффейсы прям тупые реализациии, сам не понимаеш и других не путай. Поищите еще что в инете, про интерфейс,не забивайте голову... не слушайте про контракт, он в ушах плеш проел . , но так тяжело слушать этот "а ля бритиш акцент", на хрена он нужен? этот "аабшштээракт", если другие слова тупа рубиш по русскому акценту class-класс , animals -анималс. или этот ." interface" -интерфейс... ,а почему не "Энтэрфайсзе"... - или не "Иинтэ файcе" как есть правильно ))) икстати и у них abstract - и произносится "абстракт".
@alishevN
@alishevN 2 жыл бұрын
Ха-ха
@user-ef5ni3ej7t
@user-ef5ni3ej7t 2 жыл бұрын
Вот это у тебя бомбит, малыш =D
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
ну пользы от твоего коммента ноль "поищите еще что в инете" - то что доктор прописал
@denvinichenko5270
@denvinichenko5270 6 жыл бұрын
Спасибо!
@drewkozin7
@drewkozin7 3 жыл бұрын
Спасибо!
FOOTBALL WITH PLAY BUTTONS ▶️ #roadto100m
00:29
Celine Dept
Рет қаралды 72 МЛН
WHY DOES SHE HAVE A REWARD? #youtubecreatorawards
00:41
Levsob
Рет қаралды 30 МЛН
Как быстро замутить ЭлектроСамокат
00:59
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 4,7 МЛН
Создать локальный репозиторий GIT
8:31
Аматор DED
Рет қаралды 290
Принципы ООП. 1. Инкапсуляция
8:55
Sergey Nemchinskiy
Рет қаралды 192 М.
Java. Класс Object. Разбор вопросов на собеседование.
21:16
Sergey Arkhipov Java Tutorials
Рет қаралды 29 М.
Java интерфейсы / Java для начинающих / Уроки Java
12:31
FOOTBALL WITH PLAY BUTTONS ▶️ #roadto100m
00:29
Celine Dept
Рет қаралды 72 МЛН