ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルでのインターフェイスと抽象クラスの違いの詳細な分析

PHP_PHP チュートリアルでのインターフェイスと抽象クラスの違いの詳細な分析

WBOY
WBOYオリジナル
2016-07-21 15:08:01802ブラウズ

インターフェイスと抽象クラスを区別するのは非常に困難です。これらは非常に似ており、メソッドには定義されたロジックがなく、すべてサブクラスによって意図されているか継承されます。 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());
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327491.html技術記事インターフェイスと抽象クラスを区別するのは非常に困難です。これらは非常に似ており、メソッドには定義されたロジックがなく、すべてサブクラスによって意図されているか継承されます。 2 つを区別するには、次の 1 つの文を覚えておいてください: インターフェースは仕様です...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。