认证高级PHP讲师
例えば、生物と人。このとき、生物はインターフェースとして、人は生物を実装する抽象クラスとして、男性と女性は具体的な実装クラスとして使用できます。なぜこのように設計できるのでしょうか。生物学は非常に抽象的な概念であるため、その特定の動作 (つまり、特定のメソッドの実装) を抽象化することが困難です。なぜ、人間は抽象クラスとして使用できるのでしょうか。たとえば、這って逃げることもできますが、男性と女性は異なる性的特性を持っている可能性があり、同時に、いくつかの公共的な行動が存在する可能性がありますが、これは抽象的な方法として使用できます。抽象クラスを作成し、サブクラスにそれを実装させます。おそらくそれです。
例えば、人でも物でも、似たような物体(よく考えたら、他の言葉は適切ではありません)がたくさんあります。それらの属性はほぼ同じなので、クラスに抽象化できます。たとえば、自動車カテゴリには、ホイール、エンジン、シャーシ、シェルなどの属性があります。 new オブジェクトを使用して現在の属性を保存します。これらの属性をデータベースに保存することも、現在のオブジェクトがデータを保存する役割を果たすこともできます。オブジェクトはデータを保存できるだけでなく、車の始動などの独自のメソッドも持つことができます。ボタンをクリックして、現在のオブジェクトの起動メソッドを呼び出します。一般的なクラスのメソッドはデータの変更に関連しますが、すべてではありません。たとえば、データベース接続クラスはデータを変更せず、データベースに接続する役割のみを果たします。 インターフェイスは通常、外部呼び出し用です。最終的に有用なアクションを達成する一連のメソッドを作成します。この一連のメソッドの最初はインターフェイスです。このように理解できます。たとえば、単純なログイン インターフェイスでは、ユーザー名とパスワードを入力した後、[OK] をクリックしてバックグラウンド ログイン インターフェイスの呼び出しを開始し、サーバーにはユーザー名とパスワードを受信するメソッドが必要です。 、別の方法であるパスワードを確認する必要があります。検証後、メッセージがクライアントに返されます。ログインの成功または失敗が発生し、一連の動作が完了します。もちろん、これらをメソッド内で完了することもできます。つまり、開始点はインターフェイスです。 上記の記述は比較的単純ですが、完全に正確というわけではありません。
インターフェイスは機能/動作を表します。たとえば、人も犬も走れる場合、インターフェイス IRunable を定義できます。 インターフェイスは、コンポーネント間の分離を実現する良い方法です。 抽象クラスはポリモーフィズムを実現し、コードをより簡単にスケーラブルにするように設計されています。
インターフェイスは 100% 自然な抽象クラスのようなものです。
インターフェイスはクラスのグループのプロトコルを定義する傾向が強いですが、抽象クラスはすでに実装に一歩近づいています。
たとえば、抽象クラスは、いくつかの一般的なメソッドを実装するためにテンプレート メソッド パターンで使用されますが、さまざまなメソッドの実装はサブクラスに延期されます。
簡単な例を挙げると、すべての国の人々を抽象化したい場合、それをインターフェースに抽象化することを考えるでしょう。そして、sayHelloと呼ばれるメソッドがあります:
sayHello
OK、このインターフェイスを実装するすべてのオブジェクトは、さまざまな国の人々を表す sayHello メソッドを実装するだけで済みます。また、各国にはそれぞれ異なる挨拶方法があります。
しかし、ビジネスがより複雑になった現在、これらの人々には cry、walk などの一般的な機能が必要です。その場合、この時点で、次のように Human を抽象クラスに抽象化することを検討すべきでしょうか。 リーリー
cry
walk
Human
参考: Java™ チュートリアル :: Java 言語を学ぶ :: インターフェイスと継承 :: 継承 :: 抽象メソッドとクラス :: 抽象クラスとインターフェイスの比較
抽象クラスは抽象的なものに使用され、インターフェイスは抽象的な動作に使用されます
このクラスは統一された操作を定義し、オブジェクトのメソッドを提供します
例えば、生物と人。このとき、生物はインターフェースとして、人は生物を実装する抽象クラスとして、男性と女性は具体的な実装クラスとして使用できます。なぜこのように設計できるのでしょうか。生物学は非常に抽象的な概念であるため、その特定の動作 (つまり、特定のメソッドの実装) を抽象化することが困難です。なぜ、人間は抽象クラスとして使用できるのでしょうか。たとえば、這って逃げることもできますが、男性と女性は異なる性的特性を持っている可能性があり、同時に、いくつかの公共的な行動が存在する可能性がありますが、これは抽象的な方法として使用できます。抽象クラスを作成し、サブクラスにそれを実装させます。おそらくそれです。
例えば、人でも物でも、似たような物体(よく考えたら、他の言葉は適切ではありません)がたくさんあります。それらの属性はほぼ同じなので、クラスに抽象化できます。たとえば、自動車カテゴリには、ホイール、エンジン、シャーシ、シェルなどの属性があります。 new オブジェクトを使用して現在の属性を保存します。これらの属性をデータベースに保存することも、現在のオブジェクトがデータを保存する役割を果たすこともできます。オブジェクトはデータを保存できるだけでなく、車の始動などの独自のメソッドも持つことができます。ボタンをクリックして、現在のオブジェクトの起動メソッドを呼び出します。一般的なクラスのメソッドはデータの変更に関連しますが、すべてではありません。たとえば、データベース接続クラスはデータを変更せず、データベースに接続する役割のみを果たします。
インターフェイスは通常、外部呼び出し用です。最終的に有用なアクションを達成する一連のメソッドを作成します。この一連のメソッドの最初はインターフェイスです。このように理解できます。たとえば、単純なログイン インターフェイスでは、ユーザー名とパスワードを入力した後、[OK] をクリックしてバックグラウンド ログイン インターフェイスの呼び出しを開始し、サーバーにはユーザー名とパスワードを受信するメソッドが必要です。 、別の方法であるパスワードを確認する必要があります。検証後、メッセージがクライアントに返されます。ログインの成功または失敗が発生し、一連の動作が完了します。もちろん、これらをメソッド内で完了することもできます。つまり、開始点はインターフェイスです。
上記の記述は比較的単純ですが、完全に正確というわけではありません。
インターフェイスは機能/動作を表します。たとえば、人も犬も走れる場合、インターフェイス IRunable を定義できます。 インターフェイスは、コンポーネント間の分離を実現する良い方法です。
抽象クラスはポリモーフィズムを実現し、コードをより簡単にスケーラブルにするように設計されています。
インターフェイスは 100% 自然な抽象クラスのようなものです。
インターフェイスはクラスのグループのプロトコルを定義する傾向が強いですが、抽象クラスはすでに実装に一歩近づいています。
たとえば、抽象クラスは、いくつかの一般的なメソッドを実装するためにテンプレート メソッド パターンで使用されますが、さまざまなメソッドの実装はサブクラスに延期されます。
簡単な例を挙げると、すべての国の人々を抽象化したい場合、それをインターフェースに抽象化することを考えるでしょう。そして、
リーリーsayHello
と呼ばれるメソッドがあります:OK、このインターフェイスを実装するすべてのオブジェクトは、さまざまな国の人々を表す
sayHello
メソッドを実装するだけで済みます。また、各国にはそれぞれ異なる挨拶方法があります。しかし、ビジネスがより複雑になった現在、これらの人々には
要約すると、抽象メソッドのみがある場合はインターフェイスを使用し、一般的な具象メソッドがある場合は抽象クラスを使用します。cry
、walk
などの一般的な機能が必要です。その場合、この時点で、次のようにHuman
を抽象クラスに抽象化することを検討すべきでしょうか。 リーリー参考:
Java™ チュートリアル :: Java 言語を学ぶ :: インターフェイスと継承 :: 継承 :: 抽象メソッドとクラス :: 抽象クラスとインターフェイスの比較
抽象クラスは抽象的なものに使用され、インターフェイスは抽象的な動作に使用されます
このクラスは統一された操作を定義し、オブジェクトのメソッドを提供します