インターフェイスと抽象クラスを区別するのは非常に困難です。これらは非常に似ており、メソッドには定義されたロジックがなく、すべてサブクラスによって意図されているか継承されます。 2 つを区別するには、次の 1 つの文を覚えておいてください: インターフェースは仕様であり、クラスは実装です。 インターフェースの目的は、誰もが従う仕様を定義することです。
言い換えれば、インターフェースと抽象クラスは目的の点で明確に区別できます。言い訳はあるのですが、なぜ依然として抽象クラスが必要なのかという疑問が残ります。
一緒に、Animal という名前のクラスを定義します。このクラスには、Dog と Cattle という 2 つのサブセットがあり、どちらも run() メソッドと speech() メソッドという 2 つのメソッドがあります。
Dog と Cattle の「run」が同じであるため、run() メソッドのビジネス ロジックは同じであり、「speak」が異なるため、speak() メソッドのビジネス ロジックは異なると仮定します。さらに、これら 2 つのメソッドが存在する必要があることを規定する IAnimal インターフェイスがあります。これは、Animal クラスがこれら 2 つのメソッドを実装する必要があることを意味します。同様に、2 つのサブクラス Dog と Cattle にもこれら 2 つのメソッドが必要です。その場合、次のように定義できます。これ :
コードをコピー コードは次のとおりです:
interface IAnimal{
public function run();
public function speech();
}
class Animal は IAnimal{
を実装しますpublic function run(){
//同じ実行ロジックをここに追加できます
return "same run
";
}
public function speech(){
//同じ話すロジックをここに追加できます
return "同じspeak
";
}
}
class Dog extends Animal{
public function speech(){
//ここにDogロジックを追加できます
return "Dog speech
";
}
}
class Cattle extends Animal{
public function speech(){
//ここにいくつかの Cattle ロジックを追加できます
return "Cattle speech
";
}
}
$oDog=new Dog( );
echo($oDog->run());
echo($oDog->speak());
$oCattle=new Cattle();
echo($oCattle->run());
echo( $oCattle->speak());
?>
http://www.bkjia.com/PHPjc/327491.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327491.html技術記事インターフェイスと抽象クラスを区別するのは非常に困難です。これらは非常に似ており、メソッドには定義されたロジックがなく、すべてサブクラスによって意図されているか継承されます。 2 つを区別するには、次の 1 つの文を覚えておいてください: インターフェースは仕様です...