Я искал вокруг SO, а также остальную часть Интернета для хорошего ответа, но я не нашел того, что я действительно понимаю. Я собираюсь представить это по-другому, и, надеюсь, ответы помогут и другим.
Насколько я понимаю, обе концепции имеют одни и те же правила, за исключением того, что абстрактный класс более гибкий из-за способности реализации метода. Кроме того, я знаю, что вы можете реализовать несколько интерфейсов и расширить только один класс, но я уверен, что есть больше различий, чем те, о которых я говорил.
Посмотрите на два фрагмента кода и дайте мне пример того, что я могу сделать с каждым из моих примеров, которые заставили бы меня хотеть или не хотеть использовать другое.
Абстрактный класс
abstract class Foo {
abstract public function getValue();
abstract public function setValue($value);
}
class myObj extends Foo {
function getValue() {
}
function setValue($value) {
}
}
Интерфейс
interface Foo {
public function getValue();
public function setValue($value);
}
class myObj implements Foo {
function getValue() {
}
function setValue($value) {
}
}