この記事は、PHP におけるクラス継承とインターフェイス継承の比較入門です。一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。
PHP クラスの継承:
1. PHP クラスは多重継承をサポートしていません。つまり、サブクラスは 1 つの親クラスのみを継承できますが、次のような複数レベルの継承をサポートしています。
class frist{ public function __construct(){ echo "我是第一个类。","<br>"; } public function printer(){ echo "frist","<br>"; } } class seconds extends frist{} class third extends seconds{} $obj = new third(); $obj->printer();
結果: これが最初のクラスです。 frist の 2 番目と 3 番目のクラスは、printer() メソッドをオーバーライドしません。printer() メソッドは、3 番目のクラスがインスタンス化された後に呼び出すことができます。
2. 継承権限の問題
(1) 親クラスのプライベート メソッドは継承できず、親クラスはプライベート化されます
(2)親クラスの protected メソッドは継承可能 Inherited ですが、インスタンス化されたオブジェクトから呼び出すことはできません。呼び出すと、「Protected メソッド frist::printer() への呼び出し」というエラー メッセージが表示され、親クラスはこのメソッドをprotected モード
(3) 親クラスのパブリック メソッドは、インスタンス化されたオブジェクトによって継承して呼び出すことができ、パブリック メソッド
(4)サブクラスは親クラスの public メソッドまたは protected メソッドをオーバーライドできますが、メソッドを再プライベートにすることはできません。同じ名前が使用されている場合は、このクラスで再宣言するだけです。
3. インターフェイス クラスの継承
(1) インターフェイスは多重継承をサポートしており、インターフェイス クラスのメソッドを実装する必要はありません。例:
interface frist{ public function ex1(); } interface seconds{ public function ex2(); } interface third extends frist,seconds{ public function ex3(); } class fourth implements third{ public function ex1(){} public function ex2(){} public function ex3(){} } class fourth implements frist,seconds{ public function ex1(){} public function ex2(){} }
(2) インターフェイス クラスのメソッド権限は次のとおりです。すべて public で、デフォルトは public です。
(3) インターフェイスを参照するクラスは、インターフェイスのすべてのメソッドを実装する必要があります。実装しない場合は、次のようなエラーが報告されます。「クラス e には 1 が含まれています」つまり、クラス e には 1 つの抽象メソッドが含まれるため、残りのメソッドは抽象宣言または実装する必要があります。
4. 抽象クラス: クラス内に抽象メソッドがある限り、このクラスは抽象クラスとして定義する必要があります
(1) 抽象クラスは継承し、抽象クラスはオーバーライドできません親クラスのメソッド。
(2) 抽象クラスの継承は、親クラスのメソッドを拡張したものです。
(3) すべての抽象メソッドは、インスタンス化する前に、継承された派生クラスでオーバーロードする必要があります。
(4) 抽象クラスによって実装された通常のディストリビューションは、非抽象サブクラスで直接呼び出すことができます。
5. インターフェイスと抽象クラスの類似点と相違点 (抽象クラスとインターフェイスの違いを参照)
(1) インターフェイスの使用は、キーワードのimplements を通じて実現され、abstract の場合はクラス クラス継承のキーワード exotends を使用して操作を実装します。
(2) インターフェイスにはデータ メンバーはありませんが、抽象クラスにはデータ メンバーがあり、抽象クラスはデータのカプセル化を実装できます。
(3) インターフェイスにはコンストラクターはありませんが、抽象クラスにはコンストラクターを含めることができます。
(4) インターフェイス内のメソッドはすべてパブリック型ですが、抽象クラス内のメソッドはプライベート、プロテクト、またはパブリックで変更できます。
(5) クラスは複数のインターフェイスを同時に実装できますが、実装できる抽象クラスは 1 つだけです。
(6) 類似点: function getName(); など、関数本体には何も記述できません。
以上がPHPにおけるクラス継承とインターフェース継承の比較入門の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。