2012-05-04 26 views
-1

Interfaceを使用する理由抽象クラスとインタフェースをいつ使用するのですか?

私たちは一つのインターフェースを実装するときに、そのインターフェースのメソッドの定義を書かなければなりません。 したがって、インターフェイスを実装する必要がありますか?私たちは直接クラスにメソッドを書くことができます。

感謝:)あなたはclasses.If定義のN番号1つの方法を使用されてきた

+0

http://docs.oracle.com/javase/tutorial/java/IandI/abstract.htmlおよびhttp://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html –

+0

より明確な質問。あなたは「どこ?」とはどういう意味ですか?抽象クラスをいつ使うのか、Interfaceをいつ使うのですか? – Garbage

+0

可能な複製[実用的な例で使用抽象クラスとインターフェイスの理解を助けることができますか?](http://stackoverflow.com/questions/627199/can-you-help-me-understand-in-a-practical -example-the-usage-abstract-classes-vs) –

答えて

0

は、各クラスの使用インターフェイスとは異なります。

たとえば、1つのメソッドが50のクラスで似ていて、別の50のクラスが異なる動作をしているとしましょう。つまり、抽象クラスを使用します。メソッドを定義します。

最初の50クラスに使用し、残りの50クラスの動作が異なるため、クラスの動作に従って既存のメソッドをオーバーライドします。

Interface Graphics 
{ 
    void size(); 
    void draw(); 

} 

Class Rectangle implements Graphics 
{ 
    void size() 
    { 
     x=10; 
     y=10; 
    } 
    void draw() 
    { 
     ..... 
    } 

} 
class Triangle implements Graphics 
{ 
    void size() 
    { 
     x=10; 
     y=10; 
    } 
    void draw() 
    { 
     ..... 
    } 

} 

両サイズは両方のクラスに対して同じである、次にすべてのクラスは、このクラスを拡張する場合はサイズが類似しており、一部のクラスの必要がある場合のみdraw() を定義次いで抽象

abstract class Graphics 
{ 
    void size() 
    { 
     x=10; 
     y=10; 
    } 
    abstract void draw(); 

} 

を使用別の位置は、サイズをオーバーライドします。

0

これより面接の質問のように - 長い間arroundのもの及びその意見またはこれをバックアップするか、そのアイデアを持つ多くの人々とそれらの議論の一つであるものを使用するときについて

Decission。私は、ほぼ毎回動く基本ルールがあると思います。「A is A B」という文を作ることができるなら、抽象クラスと継承を使用してください。 "Aができるようにする"という言葉を作ることができる、あるいはクラスが何であるかのためのインタフェース、クラスのためのインタフェースを作ることができる場合は、インタフェースを使用してください。

たとえば、三角形はポリゴンですが、三角形がポリゴンであると言うことは意味がありません。

とにかくこれまでの経験則では、あなたの常識を使用してください。場合によっては、上記のルールがあなたに逆のことを示すとしても、インターフェイスがちょうど良いものになることがあります(もちろん、結果を考慮した上で)。

1

例が役に立つかもしれません。以下のシナリオを参照してください。

AがBを拡張し、新しいクラスCを作成しているとき、あなたはBで新しいメソッドを追加した場合、AはBと一緒にCを拡張するので、 go for Interface.

2.class A implements B { 
.. 
.. 
} 

を作成し、それができない

1.class A extends B{ 
.. 
.. 
.. 
} 

( B)は100クラスで実装されているため、すべてのクラスで新しいメソッドを実装するのは難しいため、抽象クラスに移動し、スケルトン実装で新しいメソッドを追加します。

詳細については、Effective Java Joshua Blochによる。

関連する問題