インターフェイスの目的は、クラス間の契約になることです。複数の具体的なクラスがそれを実装している場合、インターフェイスは役に立たないでしょうが、すべてが異なる入力を期待していました。インターフェースを見ると、実装クラスが期待する入力のタイプがわからないため、インターフェースは基本的に役に立たなくなります。すべて同じインターフェースを使用する異なる具象クラスを交換することはできません。それらはすべて異なる入力を想定している (異なるインターフェースを持っている) からです。
classA を classB に置き換えることはできませんでしたが、どちらも同じインターフェースを持っているため、両方が機能するという保証がありました。これは基本的に、人間が知っているすべての OOP パターンに対してインターフェイスを役に立たなくします。
編集例
class CommandList {
public function addCommand(Command $command) {
$this->commands[] = $command;
}
public function runCommands() {
foreach ($this->commands as $command) $command->run($this);
}
}
interface Command {
public function run(CommandList $commandList);
}
class Hop implements Command {
public function run(CommandList $commandList) {
// hop here
}
}
class Skip implements Command {
public function run(CommandList $commandList) {
// skip here
}
}
インターフェイスがコントラクトとしてどのように機能するかがわかりますか? その接点を断ち切ると、Command を実装するものは交換できなくなります。