Возможный дубликат:
Интерфейс против абстрактного класса (общий OO)
EDIT: Я просто прочитал вопросы и ответы на вопросы из "возможного дубликата", и мне очень грустно, что кто-то считает эти два вопроса даже похожими... но, о хорошо...
-------------------------------------------- -----------------------------
Привет всем, Я пытаюсь понять что-то о интерфейсах в парадигме ООП. Я знаю разницу между абстрактным классом и интерфейсом, я также знаю, что интерфейсы в основном позволяют легко выполнять множественное наследование и дизайн, но я не получаю "принцип обещания". Я имею в виду, что интерфейс должен быть обещанием, что класс, реализующий интерфейс, использует все методы интерфейса.
Что я не понимаю, нам нужно проверить, реализует ли класс интерфейс с instanceOf каждый раз, когда мы вызываем его методы? Без чтения документации вы понятия не имеете, какой класс реализует интерфейс. И если вы читаете код, чем видите, что этот метод определен, и вы можете его назвать?!
Если у меня
случай А.
class Ball{
function kick(){...};
}
или случай В.
interface Kickable{
function kick;
}
class Ball implements Kickable{
function kick(){...};
}
Единственное различие заключается в том, что в случае A я получаю сообщение об ошибке при вызове метода, которого он не существует ( "во время выполнения" ), и в случае B я получу эту ошибку при попытке запустить код while пытаясь "скомпилировать". Runtime и компиляция определенно используются неправильно здесь (среда PHP).
Я помню, в Java появился интерфейс Runnable, который позволяет выполнять потоки. Почему мы должны реализовать интерфейс Runnable, а затем определить метод run() в этом классе? Я имею в виду, что класс может иметь метод Run без реализации интерфейса, и есть средства для проверки того, имеет ли класс специальный метод. Хорошо, может быть, моя часть Java вопроса немного запутанна:)))
Прошу прощения за такой запутанный вопрос, но я надеюсь, что кто-то прошел через эти проблемы в понимании и что теперь он может поделиться своим заключением:)
Спасибо, Luka