Abstract class VS interface
Abstract class VS interface
Привет друзья.
Итак, я как честный человек, пытаюсь постигнуть программирование под андройд начиная с самого языка Java. Дошел значит до таких понятий как абстрактный класс и интерфейс. В моей голове без проблем отложилось, что в них задаются методы, которые обязаны быть в подклассах. В асбтрактном классе еще могут быть поля, в интерфейсе могут быть только методы. Ок. Но никак не могу понять, для чего используются интерфейсы? Ну почему, например, не сделать абстрактный класс просто? Кто-то может просветить? В каких ситуациях чем пользоваться?
Итак, я как честный человек, пытаюсь постигнуть программирование под андройд начиная с самого языка Java. Дошел значит до таких понятий как абстрактный класс и интерфейс. В моей голове без проблем отложилось, что в них задаются методы, которые обязаны быть в подклассах. В асбтрактном классе еще могут быть поля, в интерфейсе могут быть только методы. Ок. Но никак не могу понять, для чего используются интерфейсы? Ну почему, например, не сделать абстрактный класс просто? Кто-то может просветить? В каких ситуациях чем пользоваться?
Re: Abstract class VS interface
Представь что интерфейс это розетка, а классы в которых ты реализовываешь этот интерфейс это вилка, так вот розетка то одна и под неё подходят n-ное число вилок. В своё время я так понял интерфейсы.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Abstract class VS interface
По сути интерфейс заменяет множественное наследование =)
CEO of a company R.id.team
Re: Abstract class VS interface
Понимание приходит во время практики.
Абстрактные классы служат для создания общего родителя для классов, в нем описывается все, что должно быть обязательно реализовано в предках этого класса. Другими словами это общеизвестный шаблон, зная который мы можем точно обращаться к методам его предков.
Интерфейсы же служат для создания мостиков между блоками программы. К примеру мы пишем свой компонент календарика, в нем реализовываем интерфейс, в который календарь отправляет данные при нажатии на дату. Для того чтоб использовать календарь у себя в программе, мы создаем его клон, а чтоб из него в основной программе получить данные выбора, мы подключаемся к его интерфейсу.
Абстрактные классы служат для создания общего родителя для классов, в нем описывается все, что должно быть обязательно реализовано в предках этого класса. Другими словами это общеизвестный шаблон, зная который мы можем точно обращаться к методам его предков.
Интерфейсы же служат для создания мостиков между блоками программы. К примеру мы пишем свой компонент календарика, в нем реализовываем интерфейс, в который календарь отправляет данные при нажатии на дату. Для того чтоб использовать календарь у себя в программе, мы создаем его клон, а чтоб из него в основной программе получить данные выбора, мы подключаемся к его интерфейсу.
Re: Abstract class VS interface
Нда, что-то туговато у меня это в голове откладывается. Вернее в теории я все понял. Спасибо хорошей статье на хабре (тык), и вам конечно, друзья. Но вот придумать у себя в голове какую-то ситуацию, в которой надо было бы использовать одно или другое не получается... Наверное действительно придет со временем и с практикой...
Re: Abstract class VS interface
Для этого надо хорошенько изучить JavaCore. Вы лучше ищите в Гугле. Там есть детальные статьи. Например невозможно брать экземпляр с Интерфейса(Объекты) но интерфейс может ссылать хоть на любой объект которое наследует его. итд. В интерфесе невозможно реализовать методы. А в Абстрактных классах можно. Можно и оставлять их Абстрактным чтобы наследники переопределили. Их много разниц. Гугл вам в помощьaradon писал(а):Нда, что-то туговато у меня это в голове откладывается. Вернее в теории я все понял. Спасибо хорошей статье на хабре (тык), и вам конечно, друзья. Но вот придумать у себя в голове какую-то ситуацию, в которой надо было бы использовать одно или другое не получается... Наверное действительно придет со временем и с практикой...
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Abstract class VS interface
Хотите извращенства? Как-то так! =)В интерфесе невозможно реализовать методы.
P.S. внутренний класс всегда статический. В итоге интерфейс.класс.метод()
Код: Выделить всё
public interface Levels{
class Items {
public String value;
public String path;
public String getValue() {return value;}
}
}