Тёмный

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

alishev
Подписаться 154 тыс.
Просмотров 106 тыс.
50% 1

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

Опубликовано:

 

30 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 153   
@alishevN
@alishevN 6 лет назад
Регистрируйтесь на курс "Продвинутая Java": ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-rRe1vT0SDD8.html Практикуйтесь в написании Java кода: java-marathon.tilda.ws
@dontknowwhattotypelo
@dontknowwhattotypelo 6 лет назад
Получается: 1) абстрактный класс = что-то базовое и большое, мы должны реализовать ВСЕ абстрактные методы, это удобно когда под этот класс попадают все или почти все сущности (например создаем машины, а в абстрактном классе есть абстрактные методы wheels, maxSpeed, doors, color, name и все машины имеют эти аттрибуты, т.е. реализовать все абстрактные методы ЕСТЬ смысл) 2) Интерфейсы = куски описания, которые не всегда пересекаются и их можно комбинировать, например нам нужно описать компьютер. Нет смысла все тулить в абстрактный класс, ведь компьютера бывают разные: ноутбук, домашний ПК, сервер, compute stick. И объекты будут иметь поля: внешний блок питания (большой ПК / сервер), Адаптер питания (ноутбук, маленький компьютер), монитор, встроенный дисплей (ноутбук), DVD-привод (у compute stick нет вообще такого) и т.д., то есть нет смысла все это пихать в абстрактный класс и потом при желании создать объект ноутбука переопределять ненужные методы типо внешнего дисплея, внешнего блока питания и большого корпуса, т.к. это ноутбук и там попросту этого нет. А вместо этого можно реализовать по отдельности интерфейсы ноутбук, домашний ПК, сервер, compute stick, которые уже будут иметь только НУЖНЫЕ методы. Я правильно рассуждаю?
@alishevN
@alishevN 6 лет назад
Все правильно! Хорошие аналогии.
@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 4 года назад
@@nod745 А удобнее ли? На сколько я понял, интерфейс более гибкий и обширный. Какая необходимость была создавать абстрактные классы, если возможно их заменить интерфейсами?
@Serelais
@Serelais 4 года назад
@@vladimirplohotniuk5214 представь, что у тебя код игры и в нем есть 150-200 персонажей, каждому нужен набор данных, внешность, поведение, класс, раса и т. д., если ты каждому персонажа будешь иплементить по 20 интерфейсов, это не очень удобно
@pertshgalstyan6189
@pertshgalstyan6189 7 лет назад
почти никогда не пишу комментарии но брат преогромное спасибо тебе. очень четко понятно и эффективно для начинающих. спасибо тебе за то растраченное время который ты подарил яве и всем новичкам.
@yegorivanov3006
@yegorivanov3006 4 года назад
От видео к видео понимаю, что ещё не всё потеряно и смена сферы деятельности - реальность! Спасибо! Пока не могу отплатить большим чем коммент и лайк, поэтому вот!
@Nidvoraich
@Nidvoraich 3 года назад
В колокол позвони :)
@feliksbekeshov7668
@feliksbekeshov7668 2 года назад
Интересно , спустя год узнать чем ты сейчас занимаешься? получил ли ты свою первую работы в сфере айти? Если да то поздравляю
@hdhsjsjwksjsjska
@hdhsjsjwksjsjska Год назад
@@feliksbekeshov7668 а ты кемто стал за год?(просто интересно, сейчас 2 месяц учусь)
@feliksbekeshov7668
@feliksbekeshov7668 Год назад
@@hdhsjsjwksjsjska привет, да уже работаю разработчиком
@samirbagamaev93
@samirbagamaev93 Год назад
@@feliksbekeshov7668 красава
@Artem_35_
@Artem_35_ 6 лет назад
Никогда не устану говорить вам спасибо, за такие простые и лаконичные объяснения казалось бы не самых простых идей!
@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"); } } далее наследуемся от абстрактного класса и пользуемся методом. В данном случае нам не пришлось реализовывать все методы интерфейса которые могут быть избыточными. Я думаю на это нужно обратить внимание.
@Proff_Preobrazhensky
@Proff_Preobrazhensky 6 лет назад
верно, чувак просто не докачал тему, методы все равно все надо реализовать!
@Игорь-ж3ш
@Игорь-ж3ш 5 лет назад
Если далее наследоваться от абстрактного класса, то все равно нужно будет реализовать методы интерфейса
@maxkatrenko8865
@maxkatrenko8865 4 года назад
​@@Игорь-ж3ш если в интерфейсе прописать default поведение метода, то его не обязательно реализовывать ( java 8+) в в классе, который имплементирует этот интерфейс
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 года назад
@@maxkatrenko8865 ну говорят то про другую особенность
@charlesdarwin6087
@charlesdarwin6087 2 года назад
Спасибо за понятные и наглядные объяснения, почти всегда начинаю изучение темы с просмотра вашего видео. Возможно, иногда рассматриваются не все глубинные аспекты и тонкости, но после выработки полноценного понимая сути той или иной конструкции - можно спокойно это понимание расширять различными тонкостями и подробностями. Для выработки этого понимания, на мой взгляд, лучший канал и в принципе источник информации в русскоязычном сегменте 👍
@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 вот так сработало.
@MrDrummerMF
@MrDrummerMF 7 лет назад
Спасибо за видео! Скажите пожалуйста, в чем конкретно смысл создавать абстрактный метод, если при наследовании его приходится переопределять, т.е. по сути писать его заново с конкретными значениями. Это что-то вроде напоминалки, что такой метод должен обязательно быть реализован?
@alishevN
@alishevN 7 лет назад
Создавая абстрактный метод мы налагаем обязательство на его реализацию всем тем, кто наследуется от нашего абстрактного класса.
@АделинаГолубь-г6э
Автор, огромное спасибо вам! Все очень понятно объясняете. Очень ждем нового приближающегося курса:3
@r0d1oN
@r0d1oN 5 лет назад
Однозначно лайк. Ты просто мега-доступно объясняешь. Огромное спасибо) Протолкнул меня на множество просветлений в джаве))
@DolphinArtem
@DolphinArtem 2 года назад
Каждый второй пишет, что ему все понято, верю ))). Автору поклон за труд, но по ощущениям тема не раскрыта, примеры слабоваты. Это первый урок, который я пропускаю.
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 года назад
как именно ты его пропускашь?
@sereda206
@sereda206 7 лет назад
Редко когда пишу комментарии, но твои видео просто супер, помогают в обучении. Спасибо огромное
@ИванЗарембовский
@ИванЗарембовский 4 года назад
СПАСИБО ОГРОМНОЕ! Я ОЧЕНЬ ДОЛГО НЕ МОГ ПОНЯТЬ КАК ОТЛИЧАЮТСЯ Абстрактный класс и интерфейс! Здесь я понял всё и сразу! Спасибо большое! Очень часто ты объясняешь то, чего нет нигде, и без чего было-бы сложно обойтись! Очень тебе благодарен. Ещё раз огромное спасибо!
@speksi1504
@speksi1504 2 года назад
Долго не понимала тему абстрактные классы, а после просмотра видео сразу стало все на свои места. Спасибо!
@kladmonet9
@kladmonet9 4 года назад
Всё по полочкам! Благодарю за инфу. Даже решил кое-что законспектирвоать!
@ammdli771
@ammdli771 3 года назад
Блин все равно не понял. Интерфейс это контракт который обязывает реализовать имплементириующие классы все методы которые находятся в интерфейсе. А асбтрактный класс че то не втюрился... Больше похоже на "Вы не понимаете, это другое")))
@magellan127
@magellan127 Год назад
Каковы различия между абстрактным классом и интерфейсом в Java? *Интерфейс описывает только поведение (методы) объекта, а вот состояний (полей) у него нет (кроме public static final), в то время как у абстрактного класса они могут быть. private переменные не создашь в виде полей, потому что геттеры и сеттеры к ним не опишешь. *Абстрактный класс наследуется (extends), а интерфейс - реализуется (implements). Мы можем наследовать только один класс, а реализовать интерфейсов - сколько угодно (Наследование - одно уровневое, Реализация - многоуровневая). Интерфейс может наследовать (extends) другой интерфейс/интерфейсы, но не КЛАССЫ, это запрещено компилятором! *Абстрактные классы используются, когда есть отношение "is-a", то есть класс-наследник расширяет базовый абстрактный класс, а интерфейсы могут быть реализованы разными классами, вовсе не связанными друг с другом.
@Anatoli-bq1pe
@Anatoli-bq1pe 2 года назад
Лайк)
@mikhailochkaev2454
@mikhailochkaev2454 3 года назад
Я с таким наслаждением и без особых усилий еще никогда не приобретал новые знания, все благодаря грамотной подаче материала👍
@tsaykostya
@tsaykostya 8 месяцев назад
я так понял что от Абстрактных классов мы наследуем все что свойственно всем классам потомкам, а интерфейсы реализуем когда есть какие то отличительные свойства классов. т.е методы eat() и sleep() отнаследуем от класса, а fly(), sweam() от интерфеса. я правильно понял?
@mrnobody9369
@mrnobody9369 4 года назад
Привет! Вот на твоем примере уже к концу когда ты реализовал интерфейс Abletomakesound, и забрал у него метод makesound, тогда получается нам уже не нужен абстрактный класс Animal, ведь там тот же метод, или я неправильно думаю? И второй вопрос, можем ли мы в классе dog, сразу написать что мы и реализуем интерфейс и еще расширяем класс Animal, то есть dog extends Animal and implements AbletomakeSounds?
@strannikkraya1530
@strannikkraya1530 7 лет назад
Отличный канал! Всё понятно. Спасибо.
@alishevN
@alishevN 7 лет назад
Пожалуйста :)
@Vladislav-x2t
@Vladislav-x2t 7 месяцев назад
Вообще ниче не понятно, пересмотрел раз 10, исходя из урока только 1 вывод- интерфейсы и абстрактные классы это тож самое, просто если тебе надо чтобы были реализованы все методы- выбирай интерфейс, если тебе надо чтобы было реализовано много методов , но не все, можешь использовать абстрактные класс
@Shorts-ut2xb
@Shorts-ut2xb 2 года назад
автор просто настоящее золото разжевал то что я месяц не мог понять
@lacuna543
@lacuna543 5 лет назад
Абстрактный класс - это обобщения сущности и действий, а интерфейс - это лишь подтверждения того, что те или иные действия (методы) будут в классе? Я верно понимаю?
@C2H5OHH
@C2H5OHH 2 года назад
Спасибо!
@АльфредГордан
@АльфредГордан 5 лет назад
НИХ*Я не понял..но очень интересно
@NiflheimForever
@NiflheimForever 4 года назад
Как успехи?
@zemlyanin1339
@zemlyanin1339 6 лет назад
Получается, абстрактные классы - это те же интерфейсы, но с частичной реализацией и без возможности множественного наследования.
@alishevN
@alishevN 6 лет назад
Да.
@Артем-щ5у2и
@Артем-щ5у2и 4 года назад
В интерфейсах же есть реализация по-умолчанию. Получается, абстрактный класс отличается только невозможностью множественного наследования?
@Олег-к4я8о
@Олег-к4я8о 2 года назад
Хороший выпуск🔥
@АлександрШашев-ъ3ч
Прекрасно поясняете! Спасибо Вам!
@ДенисВарошко
@ДенисВарошко 5 лет назад
Спасибо за видео. Странно, что просмотров и комментариев совсем не много
@olegbulat2628
@olegbulat2628 5 лет назад
Ну просто всё разжевал досконально. Спасибо!!!
@ОлегТрофимчук-м9я
@ОлегТрофимчук-м9я 5 месяцев назад
Всём Привет дошол 41 ❤❤❤❤❤❤
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 года назад
0:00 Классы 6:23 Интерфейсы
@grobovshikov
@grobovshikov 3 года назад
Блин, это круто и гениально.
@palatense6584
@palatense6584 7 лет назад
Спасибо огромное!
@hikmatasgarli7036
@hikmatasgarli7036 5 лет назад
01.07.19 Learning....
@samirbagamaev93
@samirbagamaev93 Год назад
КРАССССААААААААААААВЧИИИИИИИИИИИККККК
@anjelomanoranjan
@anjelomanoranjan Год назад
Вопрос только 1 - когда новые видео?
@Многолицый-ф8е
@Многолицый-ф8е 7 месяцев назад
Я правильно понимаю что абстрактный класс создаётся только для того чтобы при наследовании от него, компилятор давал по шапке за то что ты забыл реализовать тот или иной метод?
@n0stamina
@n0stamina 3 месяца назад
Я вот тоже понять не могу. Как-будто бы интерфейсы тоже для этого предназначены
@ХаннаФрея
@ХаннаФрея 10 месяцев назад
Спасибо большое
@jamjam3337
@jamjam3337 Месяц назад
спасибо
@EugeneChe-81
@EugeneChe-81 3 года назад
Выскажу своё определение. Интерфейс СВЯЗЫВАЕТ две логические единицы программы. Абстрактный класс ДОПОЛНЯЕТ одну или несколько логических единиц своей логикой.
@SicilyRain
@SicilyRain 3 года назад
Спасибо! Юзаю информацию для подготовки к экзамену по программированию в Германии :)
@xlebylllek321
@xlebylllek321 Год назад
Спасибо)
@ИгорьЧумиков-й5б
Классно объяснил, спасибо большое тебе.
@БагланИсак
@БагланИсак 2 года назад
Добрый день, а поля абстрактного класса мы обязаны переопределить в наследующем классе? Есть разница с полями обычного класса?
@TierStar1994
@TierStar1994 3 года назад
К примеру у нас есть абстрактный класc Animal, а так же классы Dog, Cat, Cow которые его наследуют. И вот нам потребовалось создать класс Human, например, который умеет спать (так же как и животные класса Animal). Наверно в этом случае и пригодиться интерфейс, правильно?)
@juliajulia2081
@juliajulia2081 2 года назад
Объясняешь как БОГ!👍🏻 Все четко и понятно! а на платных курсах в злополучной «акадЭмии» ШАГ препод не мог объяснить толком зачем нужны абстрактные классы вообще и в чем их отличие от интерфейсов 😎зато постоянно ставил себя выше всех и высмеивал домашние задания… в общем небо и земля …
@TarikBat
@TarikBat Год назад
Как все таки доходчиво ты объясняешь!!! Спасибо!!!
@okeygoogle3188
@okeygoogle3188 Год назад
За это и люблю программирование. Ролику 6 лет! А он до сих пор лучше всего, что я видел по этой теме до этого. Спасибо огромное. Вы делаете жизнь тысячи начинающих программистов проще.
@ignativlev7454
@ignativlev7454 Год назад
Коллеги, может поясните: зачем нужен абстрактный класс если все равно в каждом наследнике надо переписывать метод. Не проще в классе родителе написать все общие одинаковые методы из серии идти, назвать и т.д., а в классе наследнике просто написать такой метод который нужно?
@ИванИванов-л1э6ы
@ИванИванов-л1э6ы 2 года назад
Спасибо за труд, видосик зашел. Еще бы запомнить (КАК?)
@mabutatv
@mabutatv 3 года назад
Ничего не сказано про поля абстрактного класса, поэтому имхо столько непонимания в камментах
@СаматКанатов-з8м
перфекто !!
@y9maly
@y9maly 2 года назад
2:23 доуя абстрактный штоле?!
@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 а ты через объект вызываешь метод ?
@TC_IVA
@TC_IVA 3 года назад
Спасибо большое. Понятно всё объяснил
@artem5451
@artem5451 2 года назад
а почему метод eat не относледовался?
@salakhudinov9162
@salakhudinov9162 4 года назад
не фига не понятно
@alessandrostepanov2145
@alessandrostepanov2145 3 года назад
))))
@agweprint27
@agweprint27 3 года назад
так в интерфейсе можно же реализовать те методы, где они будут для всех. +имплиментить можно сколько хочешь, а экстендить только одного. Мне кажется абстрактные методы - устаревшее явление.
@Klimpton
@Klimpton 3 года назад
ну а как ты в интерфейсе тогда поля будешь задавать? например имя или возраст )
@DagestanShop
@DagestanShop 5 лет назад
получается в интерфейсе мы не можем объявлять переменные ?
@kokkivideo
@kokkivideo 4 года назад
нет, но можно константы static final
@pascha9141
@pascha9141 3 года назад
Хорош. Аплодирую стоя!
@АлександрКожевников-ь2о
Спасибо большое за ваш труд!
@kogaro8762
@kogaro8762 7 лет назад
Спасибо за урок)
@alishevN
@alishevN 7 лет назад
Пожалуйста!
@pate2418
@pate2418 Год назад
Супер понятно!
@АлексейТимошенко-л6и
Подскажите, могут ли быть абстрактные методы у обычного, не абстрактного класса?
@seinarukiro
@seinarukiro Год назад
Нет
@maksymmax8028
@maksymmax8028 2 года назад
Спасибо за работу. Доступно, но поверхностно. Это маме посмотреть чем сын весь день занят))
@magellan127
@magellan127 Год назад
@@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 часа с примерами. Поэтому я согласен что здесь все по верхах, но для закрепления пройденного самое то!
@Devivl
@Devivl Год назад
Спасибо 🎉
@rfak05
@rfak05 2 года назад
Thnx
@Andrzej3935
@Andrzej3935 3 года назад
Здорово!
@Daym0nd
@Daym0nd 2 года назад
Абстрактный класс: Класс персонажа, здоровье персонажа, броня, мана Интерфейс: его способности, пассивные умение Правильно понимаю? Поправьте если нет, желательно на похожем примере. Спасибо
@anruslanov
@anruslanov 2 года назад
Если говоришь про "идейную" разницу, то можно и так сказать. Или например: аб.класс "Эльф": здоровье, мана, броня интерфейс "Живой пресонаж": ударить, похилиться, бежать, спать. пусть будет для примера твоего класса: эльф-мечник(это условно твой конечный класс с которым работаешь. у него там имя и возраст параметры например, а так же какие нибудь характерные методы) . он наследуется от общего абстрактного класса расы Эльф (в данном случае абстрактный класс с здоровьем маной и броней для данной фракции). и соответственно твой эльф-мечник реализуем интерфейс "живой персонаж", где прописано что может (А вернее обязан уметь) делать твой эльф-мечник. если спросить: Зачем нужен абстрактный класс? Затем, что если ты условно захотел создать себе Эльфа-лучника, то он всё равно будет являться по своей расе Эльфом. И для него не придётся описывать эльфиские параметры. Достаточно чтобы и Эльф-мечник и Эльф-лучник наследовались от абстрактного класса "эльф". Ведь у каждого эльфа есть общие характеристики. если спросить: Зачем нужен интерфейс? Чтобы понимать что может делать любой персонаж в игре в принципе. Например, этот же интерфейс могут реализовывать и друге расы: Гномы, Люди, Орки и т.д.
@Daym0nd
@Daym0nd 2 года назад
@@anruslanov огромное человеческое спасибо)
@Mihail-h7v
@Mihail-h7v 4 года назад
Большое спасибо! Все по полочкам.
@looneytoons2006
@looneytoons2006 7 лет назад
Super tnx
@andreydmitriyev4582
@andreydmitriyev4582 4 года назад
Мое почтение!
@drewkozin7
@drewkozin7 4 года назад
Спасибо!
@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 года назад
Антон такой Антон))) тебя ни разу не смутила такая конструкция создания))
@rvrsme
@rvrsme 7 лет назад
Очень хорошие уроки, мне как начинающему очень понятно. Но есть такое дело...я понимаю в чём отличие класса от интерфейса, но если спросить вкратце, можно ответить так?: Интерфейс - контракт, абстрактный класс- контракт со своими условиями в виде собственных реализованных методов.
@alishevN
@alishevN 7 лет назад
Да, все верно.
@rvrsme
@rvrsme 7 лет назад
javaRussia спасибо)
@olehanfimov7438
@olehanfimov7438 7 лет назад
Нет,не верно.Если бы автор корректно описал пример с животными, то Вы бы всё правильно поняли,но похоже,что автор и сам не совсем разобрался,раз он так Вам отвечает. Абстрактный класс,как и любой другой класс является чертежом,он описывает свойства объекта.Если мы возьмем конкретно этот пример,то правильно было бы создать переменные name, age, sex,voice(имя,возраст,пол,звук) и создать в этом абстрактном классе абстрактные методы сеттеры и геттеры(позволяют установить или же вернуть эти значения) и те,которые мы потом закинули в интерфейс(makeVoice и eat).Теперь, если мы посмотрим,то все эти методы описывают вообще всех животных,которые только существуют. Переходим к интерфейсам,интерфейс(контракт) - это способность что-то делать.Для более ясного понимания создадим еще один класс Птеродактиль и два интерфейса,первый описывает умение(возможность) ходить по земле, а второй возможность летать.Теперь,все три класса Cat,Dog и Pterodactyl наследуются от Animals т.к. все три ЯВЛЯЮТСЯ животными(это, кстати проверочное слово при наследовании),а вот с интерефейсами дела обстоят по-другому кошка и собака могут ходить,но не могут летать,поэтому имплементируем только первый интерфейс,а вот птеродактиль может как ходить так и летать,поэтому тут имплементируем оба интерфейса. Мы знаем,что в джаве нет множественного наследования,как в С++,но зато мы можем имплементировать сколько угодно интерфейсов,что полностью это компенсирует(Как по мне это удобнее).И вот теперь если у нас появятся новые классы тигр,лев,рысь и воробушек,синичка,ласточка, то мы видим всю мощь полиморфизма в ООП и нам будет очень удобно описать все эти классы.
@dontknowwhattotypelo
@dontknowwhattotypelo 6 лет назад
Получается: 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
@caffeinejavacode1475
@caffeinejavacode1475 4 года назад
Резюмируя:самое главное приемущество абстрактного класа это избавление от дублирования кода (общая логика в абстрактном классе) и а разная логика реализовуеться в каждом дочернем классе.
@vadpivot
@vadpivot 3 года назад
наоборот,реализуешь в наследнике и реализация разная,только вызов одинаков...вот он не упомянул как наследовать и имплементить одновременно
@caffeinejavacode1475
@caffeinejavacode1475 3 года назад
@@vadpivot програмирование это весело все понимают одинаково но обьясняют по разному :) на интервью тоже самое
@vadpivot
@vadpivot 3 года назад
@@caffeinejavacode1475 о пардон похоже я не тому ответил,рука дернулась...
@denvinichenko5270
@denvinichenko5270 7 лет назад
Спасибо!
@ОлегОлег-р1п3д
@ОлегОлег-р1п3д Год назад
ох уж этот кринжовый акцент со словом ЭБСТРАКТ я больше не можу
@solar9238
@solar9238 2 года назад
Нашел ответ на вопрос, так для чего оно надо если методы можно и так вызвать: Это нужно для гарантии того, что в наследуемых классах будет реализован метод с тем же названием и похожим функционалом. Например, у классов Треугольник и Круг должен быть реализован абстрактный метод get_area, который считает площадь. Иначе можно писать в одном классе area, в другом get_area, что вызывает путаницу и проблемы с поддержкой кода. Имхо, думаю это не вся суть:)
@Egorkom
@Egorkom 2 года назад
Возникло несколько вопросов: Может ли абстрактный класс реализовывать интерфейс? Может ли класс потомок реализовывать отличный от родительского класса интерфейс или только те что прописаны у предка? Может ли класс одновременно extends и implements?
@Molot502
@Molot502 7 лет назад
Опишите использование полей(не статических и статических) в абстрактном классе и интерфейсе.
@kokkivideo
@kokkivideo 4 года назад
В абстрактном классе можно объявить статические и не статические поля, в интерфейсах только константы.
@manOfPlanetEarth
@manOfPlanetEarth 4 года назад
Кешан "только константы"
@faizulla5838
@faizulla5838 2 года назад
материал прям ерунда и про интерффейсы прям тупые реализациии, сам не понимаеш и других не путай. Поищите еще что в инете, про интерфейс,не забивайте голову... не слушайте про контракт, он в ушах плеш проел . , но так тяжело слушать этот "а ля бритиш акцент", на хрена он нужен? этот "аабшштээракт", если другие слова тупа рубиш по русскому акценту class-класс , animals -анималс. или этот ." interface" -интерфейс... ,а почему не "Энтэрфайсзе"... - или не "Иинтэ файcе" как есть правильно ))) икстати и у них abstract - и произносится "абстракт".
@alishevN
@alishevN 2 года назад
Ха-ха
@Дмитрий-ц5ш5ъ
@Дмитрий-ц5ш5ъ 2 года назад
Вот это у тебя бомбит, малыш =D
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 года назад
ну пользы от твоего коммента ноль "поищите еще что в инете" - то что доктор прописал
Далее
Свадьба Раяна Асланбекова ❤️
00:12
Teeth gadget every dentist should have 😬
00:20
Просмотров 975 тыс.
7 Лет Опыта в IT | Что я Понял?
19:56
Свадьба Раяна Асланбекова ❤️
00:12