目次
インターフェースと抽象クラスの違い、インターフェースと抽象クラスの違い
ホームページ バックエンド開発 PHPチュートリアル インターフェースと抽象クラスの違い、インターフェース抽象クラスの違い_PHPチュートリアル

インターフェースと抽象クラスの違い、インターフェース抽象クラスの違い_PHPチュートリアル

Jul 12, 2016 am 08:53 AM
抽象クラス

インターフェースと抽象クラスの違い、インターフェースと抽象クラスの違い

インターフェースと抽象クラスの違いは何ですか

インターフェイスと抽象クラスの使用を選択する根拠は何ですか?


インターフェースと抽象クラスの概念は異なります。インターフェイスはアクションの抽象化であり、抽象クラスはソースの抽象化です。

抽象クラスは、このオブジェクトが何であるかを表します。インターフェイスは、このオブジェクトができることを表します。たとえば、男性と女性、これら 2 つのクラス (クラスであれば...)、その抽象クラスは人々です。彼らは皆人間であると説明してください。

人も食べることができ、犬も食べることができます。「食べる」をインターフェースとして定義し、これらのクラスに実装させます。

そのため、高級言語では、クラスは 1 つのクラス (抽象クラス) しか継承できませんが (人が同時に生物であると同時に無生物になることができないのと同じです)、複数のインターフェイス (食べること) を実装できます。インターフェイス、ウォーキングインターフェイス)。

http://hovertree.com/h/bjaf/to3l3tjm.htm

いくつかの言葉で要約すると:

1. 抽象クラスもインターフェイスも直接インスタンス化することはできません。インスタンス化する場合、抽象クラス変数はすべての抽象メソッドを実装するサブクラス オブジェクトを指し、インターフェイス変数はすべてのインターフェイス メソッドを実装するクラス オブジェクトを指す必要があります。

2. 抽象クラスはサブクラスによって継承され、インターフェイスはクラスによって実装される必要があります。

3. インターフェースはメソッド宣言にのみ使用できますが、抽象クラスはメソッド宣言とメソッド実装に使用できます

4. インターフェースで定義される変数はパブリック静的定数のみであり、抽象クラスの変数は通常の変数です。

5. 抽象クラス内のすべての抽象メソッドは、サブクラスによって実装される必要があります。サブクラスが親クラスのすべての抽象メソッドを実装できない場合、サブクラスは抽象クラスのみになります。同様に、クラスがインターフェイスを実装する場合、すべてのインターフェイス メソッドを実装できない場合、そのクラスは抽象クラスのみになります。

6. 抽象メソッドは宣言のみ可能であり、実装はできません。インターフェイスは設計の結果であり、抽象クラスは再構築の結果です。

7. 抽象クラスには抽象メソッドは存在できません

8. クラスに抽象メソッドがある場合、このクラスは抽象クラスのみになります

9. 抽象メソッドは実装する必要があるため、静的またはプライベートにすることはできません。

10. インターフェースは複数のインターフェースを継承できますが、クラスは単一のルートからのみ継承できます。

リーリー リーリー


物事の本質に焦点を当てる場合は、抽象クラスを使用し、操作に焦点を当てる場合は、インターフェイスを使用します。

抽象クラスにはインターフェイスよりもはるかに多くの機能がありますが、抽象クラスを定義するコストは高くなります。高級言語では (そして実際の設計の観点からは)、各クラスは 1 つのクラスしか継承できないためです。このクラスでは、そのすべてのサブクラスの

を継承するか、書き出す必要があります。

すべての共通点。インターフェイスの機能は大幅に低下しますが、これはアクションの説明にすぎません。また、1 つのクラスに複数のインターフェイスを同時に実装できます。設計段階での難易度は軽減されます。

インターフェースの使用方法

インターフェース: インターフェース

PHP では、インターフェイスを使用して、オブジェクトが持つべきパブリック外部操作を指定できます。

パブリックメソッドはインターフェースです。オブジェクトがどのパブリック操作メソッド (インターフェイス) に使用されるかを指定するために使用されます。これは、インターフェイス (パブリック操作メソッドのコレクション)

、つまり、インターフェイス (インターフェイス構造、パブリック メソッドのコレクション) とも呼ばれます。
パブリックメソッド(インターフェースメソッド)
定義:インターフェース(インターフェース)と呼ばれる、オブジェクトが持つ必要があるパブリック操作メソッドを制限するために使用される構造

構文:インターフェース構造を定義するには、interfaceキーワードを使用します。インターフェイスで定義されているのは、いくつかのパブリック メソッドです。



注:

1. インターフェイスのメソッド、アクセス権はパブリックである必要があります2. インターフェイスにはパブリック メソッドのみが存在でき、メンバー変数は存在できません
3. インターフェイスには、抽象化メソッドとも呼ばれる、実装されていないメソッドのみを含めることができます。ただし、抽象キーワードはありません。

クラスはインターフェースを実装し、キーワードimplementsを使用して完了します。

このように、インターフェイスを実装するクラスは、インターフェイス内のすべての抽象メソッドを実装する必要があります。そして、この方法は公開外部操作方法でなければならないことは確かです。

複数の実装: この関数は理論的には抽象クラスを通じて実装できますが、抽象クラスは専門的ではありません。

PHP は複数の実装をサポートし、単一の継承のみをサポートするため、インターフェイスを使用することは実装の点でより専門的です。

PHPオブジェクトインターフェースのサポート、クラス定数を定義可能、インターフェースの継承も可能

抽象メソッドと抽象クラス

OOP 言語では、クラスは 1 つ以上のサブクラスを持つことができ、各クラスには、
外部コードがアクセスするためのインターフェイスとして少なくとも 1 つのパブリック メソッドがあります。抽象メソッドは継承を容易にするために導入されています。その使用法を説明する前に、まず抽象クラスと
抽象メソッドの定義を見てみましょう。
抽象メソッドとは何ですか?メソッド本体を持たずにクラス内で定義するメソッドは抽象メソッドです。いわゆるメソッド本体とは、メソッドが宣言されるときに中括弧やその中のコンテンツが存在せず、宣言時にメソッド名の直後に存在することを意味します。
抽象メソッドを宣言する場合は、末尾にセミコロンを追加し、キーワード「abstract」を追加します。
例:
abstract function fun2(); "abstract" メソッド本体のない抽象メソッド "fun1()" と "fun2()" を忘れないでください
抽象メソッドの後にはセミコロンもあります。抽象クラスとは何ですか?クラス内に抽象メソッドが存在する限り、そのクラスは抽象クラスとして定義する必要があり、また抽象クラス内で「abstract」キーワードを使用して抽象クラスを変更する必要があります。は抽象属性ではありませんが、1 つのメソッドが抽象メソッドである限り、クラスは抽象クラスとして宣言され、「abstract」で変更される必要があります。

http://hovertree.com/menu/php/

上記の例では、抽象クラス「Demo」が定義され、「abstract」で変更されています。このクラスには、メンバー属性「$test」と 2 つの抽象メソッド「fun1」および「fun2」が定義されています。メソッド fun3(); では、抽象クラスをどのように使用すればよいでしょうか?最も重要な点は、抽象クラスはインスタンス オブジェクトを生成できないため、直接使用できないことです。クラスを介してインスタンス化されたオブジェクトを使用しているため、抽象クラスを直接使用することはできません。インスタンスオブジェクトを生成するために抽象クラスを宣言するのはどうですか?抽象クラスをオーバーロードするためのテンプレートとして抽象メソッドを使用します。抽象クラスの定義は、サブクラスが抽象クラスを継承した後、サブクラスのニーズに応じて実装される仕様を定義することと同じです。 。サブクラスは親クラスのすべての抽象メソッドを実装する必要があります。そうしないと、サブクラスにまだ抽象メソッドが存在するため、サブクラスは抽象クラスのままでインスタンス化できません。なぜ、抽象クラスから継承する必要があるのでしょうか。いくつかの関数を実装したい場合は、抽象クラスから継承する必要がある場合があります。そうしないと、これらの関数を実装できなくなります。抽象クラスを継承する場合は、そのクラスに抽象メソッドを実装する必要があります。

単一ケースパターン

  1. 单例模式(职责模式):  
  2. 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务;  
  3. 单例类:  
  4. 1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;  
  5. 2、拥有一个保存类的实例的静态成员变量  
  6. 3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)  
  7. 另外,需要创建__clone()方法防止对象被复制(克隆)  
  8. 为什么要使用PHP单例模式?  
  9. 1、php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。  
  10. 2、如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看ZF的FrontController部分。  
  11. 3、在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。  
  12. 代码实现:
  1. /1**  
  2. * 设计模式之单例模式  
  3. $_instance必须声明为静态的私有变量  
  4. * 构造函数和析构函数必须声明为私有,防止外部程序new  
  5. * 类从而失去单例模式的意义  
  6. * getInstance()方法必须设置为公有的,必须调用此方法  
  7. * 以返回实例的一个引用  
  8. * ::操作符只能访问静态变量和静态函数  
  9. new对象都会消耗内存  
  10. * 使用场景:最常用的地方是数据库连接。   
  11. * 使用单例模式生成一个对象后,  
  12. * 该对象可以被其它众多对象所使用。   
  13. */

 

<span>class</span><span> Danli {  
   
</span><span>//</span><span>保存类实例的静态成员变量  </span>
<span>private</span> <span>static</span> <span>$_instance</span><span>;  
   
</span><span>//</span><span>private标记的构造方法  </span>
<span>private</span> <span>function</span><span> __construct(){  
</span><span>echo</span> 'This is a Constructed method;'<span>;  
}  
   
</span><span>//</span><span>创建__clone方法防止对象被复制克隆  </span>
<span>public</span> <span>function</span><span> __clone(){  
</span><span>trigger_error</span>('Clone is not allow!',<span>E_USER_ERROR</span><span>);  
}  
   
</span><span>//</span><span>单例方法,用于访问实例的公共的静态方法  </span>
<span>public</span> <span>static</span> <span>function</span><span> getInstance(){  
</span><span>if</span>(!(self::<span>$_instance</span><span> instanceof self)){  
self</span>::<span>$_instance</span> = <span>new</span><span> self;  
}  
</span><span>return</span> self::<span>$_instance</span><span>;  
}  
   
</span><span>public</span> <span>function</span><span> test(){  
</span><span>echo</span> '调用方法成功'<span>;  
}  
   
}  
   </span><span>//</span><span> 何问起 hovertree.com
//用new实例化private标记构造函数的类会报错  
//$danli = new Danli();  
   
//正确方法,用双冒号::操作符访问静态方法获取实例  </span>
<span>$danli</span> = Danli::<span>getInstance();  
</span><span>$danli</span>-><span>test();  
   
</span><span>//</span><span>复制(克隆)对象将导致一个E_USER_ERROR  </span>
<span>$danli_clone</span> = <span>clone</span> <span>$danli</span>;
ログイン後にコピー

http://www.cnblogs.com/roucheng/p/3528396.html

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1125681.htmlTechArticle接口与抽象类的区别,接口抽象类区别 接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

golangには抽象クラスがありますか? golangには抽象クラスがありますか? Jan 06, 2023 pm 07:04 PM

Golang には抽象クラスがありません。 Golang はオブジェクト指向 (OOP) 言語ではありません。クラス、継承、抽象クラスの概念はありません。ただし、golang には構造体 (struct) とインターフェース (インターフェース) があり、これらを組み合わせることによって間接的に実装できます。構造体とインターフェイス オブジェクト言語の抽象クラス。

Java のデザイン パターンにおけるインターフェイスと抽象クラスの適用 Java のデザイン パターンにおけるインターフェイスと抽象クラスの適用 May 01, 2024 pm 06:33 PM

インターフェイスと抽象クラスは、分離と拡張性のためにデザイン パターンで使用されます。インターフェイスはメソッド シグネチャを定義し、抽象クラスは部分的な実装を提供し、サブクラスは未実装のメソッドを実装する必要があります。ストラテジ パターンでは、インターフェイスを使用してアルゴリズムを定義し、抽象クラスまたは具象クラスが実装を提供するため、アルゴリズムを動的に切り替えることができます。オブザーバー パターンでは、インターフェイスを使用してオブザーバーの動作を定義し、抽象クラスまたは具象クラスを使用して通知をサブスクライブおよびパブリッシュします。アダプター パターンでは、インターフェイスを使用して既存のクラスを適応させることができ、互換性のあるインターフェイスを実装できるため、元のコードとの対話が可能になります。

PHP のインターフェイスと抽象クラスの違いは何ですか? PHP のインターフェイスと抽象クラスの違いは何ですか? Jun 04, 2024 am 09:17 AM

インターフェイスと抽象クラスは、拡張可能な PHP コードを作成するために使用されます。これらの間には次のような重要な違いがあります。インターフェイスは実装を通じて強制するのに対し、抽象クラスは継承を通じて強制します。インターフェイスには具象メソッドを含めることはできませんが、抽象クラスには含めることができます。クラスは複数のインターフェイスを実装できますが、継承できるのは 1 つの抽象クラスのみです。インターフェイスはインスタンス化できませんが、抽象クラスはインスタンス化できます。

Golang の関数インターフェイスと抽象クラスの類似点と相違点についての詳細な説明 Golang の関数インターフェイスと抽象クラスの類似点と相違点についての詳細な説明 Apr 20, 2024 am 09:21 AM

関数型インターフェイスと抽象クラスはどちらもコードの再利用を可能にするために使用されますが、関数型インターフェイスは参照関数を使用し、抽象クラスは継承を使用するなど、さまざまな方法で実装されます。関数型インターフェイスはインスタンス化できませんが、抽象クラスはインスタンス化できます。関数型インターフェイスは宣言されたメソッドをすべて実装する必要がありますが、抽象クラスは一部のメソッドのみを実装できます。

Java でのインターフェイスと抽象クラスの内部クラス実装 Java でのインターフェイスと抽象クラスの内部クラス実装 Apr 30, 2024 pm 02:03 PM

Java では、インターフェイスおよび抽象クラス内で内部クラスを定義できるため、コードの再利用とモジュール化に柔軟性が提供されます。インターフェイスの内部クラスは特定の関数を実装できますが、抽象クラスの内部クラスは一般的な関数を定義でき、サブクラスは具体的な実装を提供します。

Java インターフェイスと抽象クラス: プログラミング天国への道 Java インターフェイスと抽象クラス: プログラミング天国への道 Mar 04, 2024 am 09:13 AM

インターフェイス: 実装のないコントラクト インターフェイスは、Java でメソッド シグネチャのセットを定義しますが、具体的な実装は提供しません。これは、インターフェイスを実装するクラスに、その指定されたメソッドを強制的に実装するコントラクトとして機能します。インターフェイス内のメソッドは抽象メソッドであり、メソッド本体はありません。コード例: publicinterfaceAnimal{voideat();voidsleep();} 抽象クラス: 部分的に実装されたブループリント 抽象クラスは、そのサブクラスによって継承できる部分的な実装を提供する親クラスです。インターフェイスとは異なり、抽象クラスには具体的な実装と抽象メソッドを含めることができます。抽象メソッドは、abstract キーワードを使用して宣言され、サブクラスによってオーバーライドされる必要があります。コード例: publicabstractcla

Java インターフェースと抽象クラス: それらの間の内部接続を明らかにする Java インターフェースと抽象クラス: それらの間の内部接続を明らかにする Mar 04, 2024 am 09:34 AM

インターフェイス インターフェイスは、Java の抽象メソッドと定数を定義します。インターフェイス内のメソッドは実装されていませんが、インターフェイスを実装するクラスによって提供されます。このインターフェイスは、実装クラスが指定されたメソッド実装を提供することを要求するコントラクトを定義します。インターフェイスを宣言します。 publicinterfaceExampleInterface{voiddoSomething();intgetSomething();} 抽象クラス 抽象クラスは、インスタンス化できないクラスです。これには、抽象メソッドと非抽象メソッドが混在しています。インターフェイスと同様に、抽象クラスの抽象メソッドはサブクラスによって実装されます。ただし、抽象クラスには、デフォルトの実装を提供する具象メソッドを含めることもできます。抽象クラスを宣言: publicabstractcl

抽象クラスとPHPのインターフェイスの違いは何ですか? 抽象クラスとPHPのインターフェイスの違いは何ですか? Apr 08, 2025 am 12:08 AM

抽象クラスとインターフェイスの主な違いは、抽象クラスにメソッドの実装を含めることができるのに対し、インターフェイスはメソッドの署名のみを定義できることです。 1。要約クラスは、デフォルトの実装と共有コードの提供に適した要約および具体的なメソッドを含めることができる要約キーワードを使用して定義されます。 2。インターフェイスは、行動規範と複数継承を定義するのに適したメソッドシグネチャのみを含むインターフェイスキーワードを使用して定義されます。

See all articles