Для чего так делают?

Зачем создавать интерфейс если методы и так будут работать?
Зачем делать так:
interface Walking{
    public function walk();
}
interface Swimming{

    public function swim();
}
class Dog extends Animal implements Walking {

    public function walk()
    {
        // TODO: Implement walk() method.
    }
}
class Penguin extends Animal implements Walking, Swimming{

    public function walk()
    {
        // TODO: Implement walk() method.
    }

    public function swim()
    {
        // TODO: Implement swim() method.
    }
}

Если можно так:
class Dog extends Animal{

    public function walk()
    {
        // TODO: Implement walk() method.
    }
}
class Penguin extends Animal{

    public function walk()
    {
        // TODO: Implement walk() method.
    }

    public function swim()
    {
        // TODO: Implement swim() method.
    }
}
  • Вопрос задан
  • 196 просмотров
Решения вопроса 3
@Nc_Soft
Интерфейс ГАРАНТИРУЕТ наличие такого метода в классе.
Ответ написан
syamskoy
@syamskoy
Интерфейс нужен не для того, что бы вы не забыли добавить какой-то метод. Он нужен, что бы вы работали, с контрактами. Например:
public function addToSwimmingPool(Swimming $animal): void
{
    $this->pool[] = $animal;
}

Так вы гарантируете, что добавите в бассейн только плавающих животных.

Без использования интерфейса, пришлось бы делать так:
public function addToSwimmingPool($animal): void { ... }

Тут вы могли добавить что угодно в массив. И потом где-нибудь программа бы сломалась, так как у переданных объектов нет нужных методов.

public function addToSwimmingPool(Penguin $animal): void { ... }

А так вы кроме пингвинов никого больше не добавите.
Ответ написан
Комментировать
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Интерфейс -- чистая абстракция.

Это конечно хорошо, что:
class Dog extends Animal{}
class Penguin extends Animal{}


Но walk() может и друг-человек или мой ребенок, а не только животное,
и плавать может еще рыбка, а не только животное

Когда вы строите некую логику для того, что плавает, то вам не обязательно жестко зашивать программу под животное... То, что животное (и все его потомки) могут плавать -- отлично и круто, но это частный случай
программе фиолетово, ей и мячик подойдет и ребенок и ваше животное, они (программа) ведь бассейн :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы