Интерфейсы vs. классы — обзор на Хабре
Интерфейсы в ООП (Java), по-простому? — на стэке
Всё равно пока не понятно. Интерфейс — это тоже класс, только описывающий дополнительные методы для какого-либо класса? Если да, то методы начального класса просто не видны, или ими можно пользоваться? Или их необходимо переопределять?
А если интерфейс не класс, тогда это просто список методов, объединённых под одним названием, которые можно использовать в любом классе, просто определив, для какого класса их используют? Или это группа методов, которые применимы к определённому классу? Тогда в программе переменная класса с определённым интерфейсом может использовать и методы класса, и методы интерфейса? Или только методы интерфейса?
Допустим, есть класс человек, у которого описан булев метод движение. Мы можем применить к нему набор методов "ноги", "колёса" с разными видами движения? При этом будет ли булев метод класса человек виден через интерфейс "ноги" или "колеса"? Или всё же это будут другие классы, которые мы определяем для переменной:
Человек Сэм = новый ЧеловекСНогами
?И тогда у нас должен быть описан класс ЧеловекСНогами
? Или же это просто набор методов?
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Вот хороший пример выше про Лист. Ты можешь написать свой Лист, но он будет корявый если в нем не будут работать общие для всех списков методы типа add или get. То есть это делается для стандартизации\унификации. Ты пишешь свою реализацию Листа, которая может быть в каких случая будет быстрее работать\искать\перебирать или что то еще, но при этом ява, ты и другие разработчики могут этот класс использовать как и родные листы.
интерфейс — это поведение
абстрактный класс — это стандартная реализация
ps с java8 по сути можно использовать интерфейс для дефолтной реализации. это гораздо удобнее, хотя и порождает новые проблемы. в общем, up2you :)
То же самое и тут. У тебя есть Интерфейс List. И ты знаешь что в нем есть методы add() и get(). Все. Тебе все равно там у тебя ArrayList или LinkedList. Интерфейсы нужны для того что бы ты мог обобщить какие то сущности, и работать с ними как с одной.
Интерфейс — это сущность, описывающее действия присущие ему как свойству — именно свойству, причастию (в английском языке -able окончание) — Подвижный, Запускаемый, Вычисляемый, а не предметы-существительные (колеса, ноги и т.п.).
Например,
Любой класс, который реализует свойство Подвижный, может и должен Прыгать, Идти, Приседать (другой вопрос насколько качественно). Причем каждый отдельный класс с данным интерфейсом (то есть обладает этими свойствами) может делать это по разному. И не каждый класс может реализовать данный интерфейс.
Класс — это обладатель этих свойств
А, например, файлу нельзя приписать интерфейс Подвижный.