[PHP] 抽象クラスと抽象インターフェイス

WBOY
リリース: 2016-06-20 12:29:31
オリジナル
935 人が閲覧しました

抽象クラスは特別なクラスであり、インターフェイスは特別な抽象クラスであり、ポリモーフィズムには抽象クラスまたはインターフェイスの使用が必要です

抽象クラス

抽象メソッドとは何ですか?

定義: クラスでは、メソッド本体のないメソッドは抽象メソッドです (つまり、メソッドは {} を使用せず、直接セミコロンで終わります)

abstract function test();  //抽象方法 function test(){  //有方法体,但方法体为空的 } 
ログイン後にコピー

メソッドが抽象メソッドの場合、抽象メソッドを使用する必要があります。なぜ抽象メソッドを使用するのでしょうか。

抽象クラスとは何ですか?

  1. クラス内のメソッドが抽象クラスの場合、このクラスは抽象クラスです

  2. クラスが抽象クラスの場合、これクラスは抽象

  3. で変更する必要があります。抽象クラスは、クラス内に抽象メソッドがあり、その他はすべて変更されないため、特別なクラスです。抽象クラスでメンバー属性、定数、および非抽象メソッドを宣言することもできます。

  4. 抽象クラスはオブジェクトをインスタンス化できません (抽象クラス オブジェクトは抽象クラスを通じて作成できません)

//普通的类class 类名{   }// 抽象类abstract class 类名 {   } abstract class Demo{  var a;  abstract function fun1();   function fun2()  {   }} 
ログイン後にコピー

抽象クラスの役割:

  1. 抽象クラスを使用したい場合は、その抽象クラスを継承するクラスを使用する必要があります。また、このサブクラスを使用したい場合、つまりサブクラスに次のことを許可する場合は、クラスを使用する必要があります。オブジェクトを作成するには、サブクラスが必要です。抽象クラスになることはできなくなり、サブクラスは親クラスのメソッドをオーバーライドできます (メソッド本体を抽象メソッドに追加します)。抽象メソッドのメソッドにはメソッド本体がなく、サブクラスはこのメソッドを実装する必要があります (親クラスには具体的な実装は記述されませんが、サブクラスはこのメソッド名を持つ必要があります)

  2. 抽象クラスをリストします。いくつかの仕様を定義し、これらの仕様に従ってサブクラスに独自の関数を実装させることができます。

インターフェース

  • インターフェースは特別な抽象クラス、抽象クラスは特別なクラスです

  • インターフェイスと抽象クラスは同じ機能を持ちます

  • 抽象クラスは、特定のクラスの標準を提供します実装 、インターフェイスは純粋なテンプレートです。インターフェイスは関数のみを定義し、実装内容は定義しません。インターフェースはキーワードinterfaceで宣言されます。

  • PHP は単一継承であるため、抽象クラスを使用する場合、その抽象クラスを実装したサブクラスは他のクラスを継承できません。一部の仕様を実装するだけでなく、別のクラスから継承したい場合。インターフェイス

宣言メソッド

interface 接口名{  const 常量名 = 常量值;  //接口中的属性必须为常量  function 函数名();}echo 接口名::常量名; interface Demo{  const HOST = "localhost";  function fun();}echoDemo::HOST; //输出为localhost 
ログイン後にコピー

インターフェイスと抽象クラスの比較

  1. 関数は同じで、どちらもオブジェクトを作成できません。どちらも実装にはサブクラスが必要です

  2. インターフェイスの宣言は抽象クラスとは異なります

  3. インターフェースは実装されていますが、方法が異なります

  4. インターフェース内のすべてのメソッドは抽象メソッドである必要があります。宣言できるのは抽象メソッドのみです (抽象の変更は必要ありません)

  5. インターフェイス内のメンバー属性は定数のみを宣言でき、変数は宣言できません

  6. インターフェイス内のメンバーのアクセス権限はパブリックである必要があり、最も低い権限は抽象クラスは保護されています

  7. extends キーワードを使用する代わりにクラスを使用してインターフェイスを実装し、implements という単語を使用します

    • サブクラスが抽象クラスをオーバーライドする場合親クラス インターフェイスのメソッドでは、実装を使用します。クラス – インターフェイス、抽象クラス – インターフェイスの実装。インターフェイス - インターフェイス extends

implements

を使用する 2 つの目的 1. 複数のインターフェイスを実装できますが、extends ワードは 1 つの親のみを継承します。クラス

2. 拡張と実装は同時に使用できます

注:

  • の一部のメソッドを実装するには、抽象クラスを使用できます。インターフェース
  • サブクラスでオブジェクトを作成したい場合は、すべての抽象メソッドをインターフェースに実装する必要があります

  • 別のインターフェースを継承するインターフェースを定義できます

  • クラスは複数のインターフェースを実装できます (複数の仕様に従ってサブクラスを開発するため)。カンマを使用して複数のインターフェース名を区切ります

  • クラスは継承中に次のことができます親クラス、1 つ以上のインターフェイスを実装します (最初に継承してから実装します)

ポリモーフィズム

ポリモーフィズムはオブジェクト指向の 3 つの主要な特性の 1 つです。はオブジェクト指向設計の重要な機能です。これは、ポリモーフィズムとしても知られる動的バインディングの機能を示します。ポリモーフィズムの機能により、ソフトウェアは開発および保守中に完全な拡張を実現できます。実際、ポリモーフィズムの最も直接的な定義は、継承関係を持つさまざまなクラスのオブジェクトを呼び出すことができるようにすることです。

以下は、ポリモーフィズムの使用に関するデモです。

<. 🎜>

<html>  <head>  <metacharset="utf-8">  head>  </html><?php  interface USB  //声明一个USB接口  {    function mount();    function work();    function unMount();  }    class UPan implements USB  //UPan实现了USB的功能  {    function mount()    {      echo "U盘挂载<br>";    }    function work()    {      echo "U盘工作<br>";    }    function unMount()    {      echo "U盘卸载成功<br>";    }  }   class Wire implements USB  //数据线实现了USB的功能  {    function mount()    {        echo "数据线挂载<br>";    }    function work()    {        echo "开始传输数据<br>";    }    function unMount()    {        echo "数据线卸载成功<br>";    }  }  class PC  //声明一个PC类  {    function USB($usb)    {        $usb->mount();        $usb->work();        $usb->unMount();    }  }   class Person  //声明一个Person类  {    function usePC()    {      $pc = new PC;      $upan = new UPan;      $wire = new Wire;       $pc->USB($upan);      $pc->USB($wire);    }  }  $p1 = new Person;  //实例化一个Person类  $p1->usePC(); 
ログイン後にコピー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!