4

あるインタビューで、いつインターフェースを選択するか、いつ抽象クラスを選択するか、そしてどの条件で 2 つのうち 1 つだけを選択するかを説明するように求められました..私はインターフェースの分析を思いつきました.

インターフェースは、型宣言または複数の当事者間の契約の定義に最適です。複数のプログラマーがプロジェクトの異なるモジュールで作業している場合でも、インターフェイスを定義し、実際の実装の準備が整うのを待たずに、お互いの API を使用します。

これにより、コーディングと開発の面で多くの柔軟性とスピードがもたらされます。インターフェイスを使用すると、「実装よりもインターフェイスのプログラミング」などのベスト プラクティスが保証され、より柔軟で保守しやすいコードが得られます。

しかし、抽象クラスを正当化する強い理由はありません.アドバイスしてください..!

4

7 に答える 7

30

抽象クラスは、多数の具象クラスを 1 つのエンティティの下にグループ化するために使用されます。

たとえば、抽象クラスを取り上げAnimalます。動物は具体的なものではありません。それは動物の家族です。ただし、それらはすべて特定の側面を共有しています。たとえば、それぞれにspeak()オプションがあります(魚と並べ替えを除く)。しかし、それぞれが異なる方法で実装しています。このようにして、同じではないメソッドだけをオーバーライドすることができますsleep() or breath()

一方、インターフェースは「アクション」のより直接的な定義です。そのため、Java のほとんどの (すべてではないにしても) インターフェースは 'able' (Comprable、Serializable...) で終わります。インターフェースを実装することで、他のプログラマーやコードを使用したことがある人に、このクラスでこれとこれを実行できることを伝えることができます。 . たとえば、犬はアニメーション化できません。

基本的には、これが一番いい定義だと思います。クラスがある場合は抽象クラスを使用しA is kind of B、インターフェースがある場合は抽象クラスを使用しますA can do B

それが助けになることを願っています。

于 2012-08-09T18:31:03.760 に答える
5

抽象クラスは、部分的な実装を提供する場合に使用されます。

于 2012-08-09T18:22:35.357 に答える
2
  • 抽象クラスは、必要に応じてデフォルトの動作(実装)を持つことができますが、インターフェースはできません。

  • 抽象クラスは、ALLメソッドのデフォルトの動作を提供することも、メソッドを提供しないこともできますが、インターフェースは提供できません。

  • 抽象クラスはすべてのサブクラスと状態を共有できますが、インターフェースは状態を指定しません。

  • 複数のインターフェースを実装できますが、拡張できるのは1つの(抽象)クラスのみです。

于 2012-08-09T18:26:00.687 に答える
1

インターフェイスの定義は正しいです。

抽象クラスは、まったく異なる目的を果たす必要があります。例として、動物シミュレーター用にいくつかのクラスを実装しているとしましょう。「動物」は、すでに基本的な実装を持つことができるいくつかの動作を定義しますが、それ自体はインスタンス化するのに意味のあるものではありません。同様に、「動物」のバブクラスである「ママル」についても同様です。サブクラス「Tiger」のみが抽象的ではありませんが、虎固有ではない虎が行うことのほとんどは、その抽象的スーパークラスに実装されます。

于 2012-08-09T18:26:30.860 に答える
1

1.一般的に言えば、 fromAbstract class いくつかの機能を強制的に適用する必要がある場合に An が必要になり、 サブクラスに他の機能を追加する柔軟性を持たせることができます。Sub-Class Super-Class

例えば:

Let Car be the Abstract Super-Class, which has 4 Tyres, 1 Steering ,etc...

Now the Sub classes like Santro i10, Maruti-800, Mahindr Bolero etc are Sub classes, but they need to have 4 Tyres, 1 Steering to be called a car, not they can have a radio or not as an additional feature.

2. 多重継承Interfaceがないため、Javaで導入されました。

3. Interface role .

例えば:

Let Dog be the Super-Class.

Wild Dogs and Pet Dogs are Sub-Classes.

Wild Behavior and Pet Behavior are Interfaces

Now as both Wild Dog and Pet Dog are dogs, but with different behavious. Then they must implement the Wild Behavior or Pet Behavior respectively

于 2012-08-09T18:35:38.007 に答える
1

インターフェイスは、それを実装するものとの契約を宣言します。クラスにインターフェイスのメソッドが含まれることが保証されます。

抽象クラスは、それをサブクラス化するものも抽象メソッドを実装する必要があるという点で似ていますが、コードを含むメソッドを動作させることもできます。

私は、Android プログラミングのコールバックにインターフェイスをよく使用します。表示する同様のデータがたくさんあり、実装に小さな変更を加えたいだけの場合は、抽象クラスをよく使用します。抽象クラスを使用して、実装が異なるままコードの繰り返しを減らします。

于 2012-08-09T18:23:34.043 に答える
0

状況に応じてメソッドが必要な場合にのみクラスにメソッドを実装させたい場合は、抽象クラスを使用することをお勧めします。

例としては、スーパークラスの車両があり、サブクラスに車輪がある場合は車輪の数を与えたい場合があります。それらがボートである場合、それらは必要ないため、抽象クラスではそれを無視することができますが、コントラクトはまだ実装することを強制します。

于 2013-07-24T01:55:29.597 に答える