отличие интерфейса от обстрактного класса?

  • Автор темы Автор темы DDT
  • Дата начала Дата начала

DDT

Новичок
отличие интерфейса от обстрактного класса?

Привет.

сделал интерфес:
PHP:
interface ObjInt
{
  protected function method1();
}

сделал реализующий его класс:
PHP:
class Object implements ObjInt
{
   protacted function method1 {};
}

Ругается:
Fatal error: Access type for interface method method1() must be omitted




После того как интерфейс заменил абстрактным классом:
PHP:
abstract class ObjInt
{
   protected abstract function method1();
}

и сделал его наследование:
PHP:
class Object extends ObjInt
{
   public function method1();
}

все заработало :/

В чем отличие, чего не знаю?
 
Автор оригинала: kruglov
Ну дык которое слово непонятно?
Нееее, с ошибкой-то все понятно. Она исчезла с использованием абстрактного класса.

Но зачем же тогда придуман интерфейс?

Где его можно применить, что нельзя использовать абстрактный класс?
 
DDT
абстрактный класс это уже частичная реализация, которая допускает использование в себе protected и private методов, но зачем это в интерфейсе, сам подумай, если интерфейс это _вообще_не_класс? Как ты получишь доступ к protected/private методам объекта реализующего интерфейс?
 
сложность наверное вызывает перевод слова omitted. и подсветка синтаксиса даже на форуме не помогает :)
 
мне кажется что сложность вызывает количество выпитого алкоголя ;)
 
Я так понимал, что если класс реализует интерфейс, то в этом интерфейсе можно указать protected/private методы.

А интерфейс не только классы могут реализовывать?
 
Пойми, абстрактный класс нужен для того чтобы описать методы без их реализации, но так чтобы было видно как их использовать. При этом не все методы/свойства абстрактного класса обязаны быть абстрактными.
А интерфейс это для того чтобы полностью отдельно архитектор задавал класс, а потом к нему писалась реализация.
 
чтобы описать методы без их реализации, но так чтобы было видно как их использовать. При этом не все методы/свойства абстрактного класса обязаны быть абстрактными.
А интерфейс это для того чтобы полностью отдельно архитектор задавал класс, а потом к нему писалась реализация.
зачот ;)) перечитывал раза 3 ;)

-~{}~ 28.08.07 10:34:

Но зачем же тогда придуман интерфейс?

Где его можно применить, что нельзя использовать абстрактный класс?
интерфейс - своеобразное соглашение между клиентом, использующим код и автором класса, своеобразный протокол общения
именно интерфейс может гарантировать что у заданного класса будут необходимые методы, которые будут принимать необходимые параметры и возвращать данные необходимого типа. к тому же - класс может реализовывать несколько интерфейсов
 
Читал как то что в свое время OOP всех задо***ло. Вот ломка то была, до сих пор ломает. И до сих пор ни один язык не реализует всю идеалогию OOP наверно.
 
zerkms
Возьму на вооружение фразу "интерфейс - это протокол общения". Понравилось.
 
Интерфейс - это то, с чем взаимодействует пользователь класса. Доступа к защищенным/приватным элементам извне класса нет. Намек понятен?
 
mishco
ну давай я тебе интефейчов отсыплю, толко со своим пакетом.
 
Абстрактные методы имеют только обявление, но не имеют реализации.

Интерфейс описывает набор методов,которыми должен обладать класс, реализующий соответственный интерфейс...

-~{}~ 30.08.07 11:45:

И еще автор, программирование тонкое дело, за синтаксическими "АШИПКАМИ" в php коде, даже на форуме следить надо...

ладно, ладно... прочел я тему полностью... понял что по чем...
 
Сверху