[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: различие интерфейса и абстрактного класса
jetistyum
собственно встал вопрос, чем различается интерфейс от абстрактного класса
ЕСЛИ НЕ УЧИТЫВАТЬ возможность множественного наследования интерфейсов.... и определение готовых методов и свойств в абстрактных классах....
предположим есть два класса
PHP
abstract class Test{

abstract public function 
abc();

abstract public function 
cba();
}

interface 
Test2 {
  public function 
abc();
  
  public function 
cba();
}


Они чем-то будут отличаться для класса, который может их наследовать/расширять ????


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



Спустя 3 минуты, 17 секунд (18.05.2009 - 19:14) waldicom написал(а):
Так различие вроде как раз в том, что ты знаешь. Т.е. абстрактный класс позволяет определить методы, которые потом уже могут использоваться. А методы в интерфейс должны быть определены в наследуемом классе.

Спустя 6 минут, 9 секунд (18.05.2009 - 19:20) jetistyum написал(а):
ну да, эт я все знаю... просто мне задали как-то такой вопрос, я подумал и пришел к выводу, что в таком контексте ни в чем. но думаю, вдруг ошибся

Спустя 40 минут, 13 секунд (18.05.2009 - 20:00) vasa_c написал(а):
Абстрактный класс - корень какой-то иерархии. Интерфейс - просто набор методов (интерфейс объекта).

PHP
function method(mytype $object) {}

Если mytype - класс (в т.ч. и абстрактный), то $object может быть только этого класса или его потомка.
Если mytype интерфейс - $object может быть любого класса из любой ветви иерархии. Главное только, чтобы он реализовывал нужный интерфейс.

Это всё актуально для жёсткотипизированных языков.
В PHP так — примочка.

Спустя 53 минуты, 51 секунда (18.05.2009 - 20:54) jetistyum написал(а):
это все понятно, ну на сколько я знаю, это актуально И для PHP тоже.... тип аргумента указывать не обязательно, но если указал, то другой тип передать не получится.
поправь, если я не прав.
благодарю всех за информацию smile.gif

Спустя 12 часов, 40 минут, 27 секунд (19.05.2009 - 09:34) glock18 написал(а):
Абстрактный класс не обязательно корень иерархии.

А вообще, по идее, все отличия - это как раз то, что ты и перечислил))

Ну а по сути, vasa_c прав.

Цитата
Цитата
function method(mytype $object) {}


Если mytype - класс (в т.ч. и абстрактный), то $object может быть только этого класса или его потомка.
Если mytype интерфейс - $object может быть любого класса из любой ветви иерархии. Главное только, чтобы он реализовывал нужный интерфейс.


Здесь, кстати, поведение для interface и для abstract class в php одинаковое. и implements, и extends здесь по сути дают еще одну связь родитель-потомок.

Спустя 2 года, 6 месяцев, 13 дней, 2 часа, 46 минут, 54 секунды (2.12.2011 - 12:21) Гость_Денис написал(а):
суть интерфейса - в обязательстве реализовать для объекта некие абстрактные (т.е. неопределенные) методы, который будут использоваться при работе с этим объектом

если методы не будут обнаружены - возникнет ошибка,
интерфейс гарантирует, что объект реализующий его - имеет заявленные в нем методы

так примерно
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.