php エディタ Zimo を使用すると、Java の抽象クラスとインターフェイスの使用機会を探索できます。 Java プログラミングでは、抽象クラスをいつ使用するか、インターフェイスをいつ使用するかを選択することが重要です。この記事は、この一般的な質問に答え、さまざまな状況で適切な抽象クラスまたはインターフェイスを選択する方法をより深く理解するのに役立ちます。
質問内容
抽象化とインターフェースの違いはなんとなくわかったのですが、どうしても理解できないのが、どのような場合に抽象化を使用し、どのような場合にインターフェイスを使用するのかということです。インターフェイス抽象化を選択するにはどのような変数が必要ですか?またその逆も同様です?オンラインの回答のほとんどは違いを示すことを目的としていますが、私でも理解できます。いつがより適切かわかりません。
解決策
一般的な古いルールは、抽象クラスを書かざるを得なくなるまでインターフェイスを使い続けることです。
Java のinterface は、他の型が準拠するために
選択 できるパブリック インターフェイスを定義するインスタンス化不可能な型です。
- インターフェイスはパブリック メソッドを宣言できますが、これは実装者によって定義される必要があります。このようなメソッドはすべて暗黙的に
- abstract
であるため、
abstractという単語を使用する必要はありません。
古いバージョンの Java では、インターフェイスにデフォルトの実装を含めることができないため、各メソッドは - abstract
になります。これはもう当てはまりません。置き換えられない限り、インターフェースは
implementing クラスで使用されるデフォルトの実装を持つことができるようになりました。
最新バージョンの Java では、インターフェイスで - private
ヘルパー メソッドを宣言できます。これらはデフォルトの実装に役立ちます。
インターフェイスにはコンストラクターやインスタンス変数を含めることはできません。 - クラスは複数のインターフェイスを
- 実装
できます。
abstract class は、インスタンス化できない単なるクラスです。抽象クラスでは
abstract メソッドを定義する必要はありませんが、定義したくなることもよくあります。
- 抽象クラスは、任意の可視性を持つメソッドを宣言できます:
- public
、
private、
protected、および package-private。
抽象クラスはメソッドを実装することも、メソッドを - abstract
として保持することもできます。抽象クラスのメソッド
は 暗黙的な abstractではないため、そのようにマークする必要があります。
抽象クラスはコンストラクターを持つことができます。 - 拡張
クラスは、独自のコンストラクターでコンストラクターを呼び出すために
superを使用する必要があります。抽象クラスは任意の可視性のインスタンス変数を持つことができ、それらは親クラスのインスタンス変数と同様に機能します。
1 つのクラスは - abstract
クラスまたは具象クラスの 1 つのクラスのみを
拡張できます。クラスのabstract
性によって、そのクラスが持つことができるスーパークラスの数は変わりません。
は標準ではなく例外であるべきです。サブクラスに独自の動作を定義させながら内部状態を維持する必要がある場合は、抽象クラスを使用する必要があります。良い例は、Java Swing GUI ライブラリの AbstractButton
です。
abstractbutton は、ボタン、トグル ボタン、メニュー内の項目など、ウィンドウ内のボタンのように漠然と動作するものの抽象親です。誰もが abstractbutton
をサブクラス化し、そのメンバーを実装してボタンのような表示を定義できます。ただし、abstractbutton
は、ウィンドウやスイング API 全体と通信するために、多くの内部状態 (その多くは jcomponent
からのもの) も維持する必要があります。
型のコレクションのパブリック インターフェイスを定義する場合は、
を使用します。これらのメソッドの一部にデフォルトの実装を提供し、2014 年以降にリリースされた Java バージョンを使用する場合は、インターフェイスを使用します。デフォルトの実装が必要だが、依然として 2000 年代に留まっている場合は、抽象クラスを使用してください。 Java のバージョンに関係なく、プライベート状態 (インスタンス変数など) またはカスタム初期化 (コンストラクターなど) が必要な場合は、抽象クラスを使用します。 ######インターフェース:###
たとえば、次のようなインターフェイスがあるとします。
リーリー
そして、animal を実装するいくつかのクラス:
インターフェイスを戻り値の型として使用できるようになったので、メソッドは
catまたは
dogを返すことができます。
リーリー抽象クラス:
抽象クラスがあるとします:
リーリー
ここで、これを拡張するクラスは
メソッドを実装する必要があります:
リーリー上記のクラスは両方とも、必要な
getname メソッドを実装していますが、親クラスの makenoise
メソッドにもアクセスでき、必要に応じてオーバーライドすることもできます。
その他の違いに注意することも重要です:
拡張できる抽象クラスは 1 つだけですが、複数の抽象クラスを実装できます。
インターフェース。
これらは相互に排他的ではありません。
- インターフェイスはパブリック メソッドのみを持つことができますが、抽象クラスはパブリック メソッドと保護されたメソッドを持つことができます。
以上がいつ抽象化を使用し、いつインターフェイスを使用するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

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

WebStorm Mac版
便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
