Abstract class VS interface

Ответить
aradon
Сообщения: 12
Зарегистрирован: 23 фев 2013, 21:04

Abstract class VS interface

Сообщение aradon » 10 мар 2013, 19:24

Привет друзья.

Итак, я как честный человек, пытаюсь постигнуть программирование под андройд начиная с самого языка Java. Дошел значит до таких понятий как абстрактный класс и интерфейс. В моей голове без проблем отложилось, что в них задаются методы, которые обязаны быть в подклассах. В асбтрактном классе еще могут быть поля, в интерфейсе могут быть только методы. Ок. Но никак не могу понять, для чего используются интерфейсы? Ну почему, например, не сделать абстрактный класс просто? Кто-то может просветить? В каких ситуациях чем пользоваться?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Abstract class VS interface

Сообщение rezak90 » 10 мар 2013, 20:21

Представь что интерфейс это розетка, а классы в которых ты реализовываешь этот интерфейс это вилка, так вот розетка то одна и под неё подходят n-ное число вилок. В своё время я так понял интерфейсы.
R.id.team
Политика на форуме запрещена

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: Abstract class VS interface

Сообщение Finch » 10 мар 2013, 20:33

По сути интерфейс заменяет множественное наследование =)
CEO of a company R.id.team

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Abstract class VS interface

Сообщение neoksi » 11 мар 2013, 02:39

Понимание приходит во время практики.

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

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

aradon
Сообщения: 12
Зарегистрирован: 23 фев 2013, 21:04

Re: Abstract class VS interface

Сообщение aradon » 11 мар 2013, 12:44

Нда, что-то туговато у меня это в голове откладывается. Вернее в теории я все понял. Спасибо хорошей статье на хабре (тык), и вам конечно, друзья. Но вот придумать у себя в голове какую-то ситуацию, в которой надо было бы использовать одно или другое не получается... Наверное действительно придет со временем и с практикой...

behzodbek
Сообщения: 58
Зарегистрирован: 23 дек 2012, 22:58
Откуда: UZB Namangan

Re: Abstract class VS interface

Сообщение behzodbek » 20 мар 2013, 21:26

aradon писал(а):Нда, что-то туговато у меня это в голове откладывается. Вернее в теории я все понял. Спасибо хорошей статье на хабре (тык), и вам конечно, друзья. Но вот придумать у себя в голове какую-то ситуацию, в которой надо было бы использовать одно или другое не получается... Наверное действительно придет со временем и с практикой...
Для этого надо хорошенько изучить JavaCore. Вы лучше ищите в Гугле. Там есть детальные статьи. Например невозможно брать экземпляр с Интерфейса(Объекты) но интерфейс может ссылать хоть на любой объект которое наследует его. итд. В интерфесе невозможно реализовать методы. А в Абстрактных классах можно. Можно и оставлять их Абстрактным чтобы наследники переопределили. Их много разниц. Гугл вам в помощь
Изображение

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Abstract class VS interface

Сообщение Mikhail_dev » 21 мар 2013, 11:17

В интерфесе невозможно реализовать методы.
Хотите извращенства? Как-то так! =)
P.S. внутренний класс всегда статический. В итоге интерфейс.класс.метод()

Код: Выделить всё

public interface Levels{
    class Items {
        public String value;
        public String path;

        public String getValue() {return value;}
    }
}
Вообще в Java столько всего, что куда позже уже начинаешь вникать в неё.

Ответить