2013-01-23 12 views
12
interface A { 

    public void doSomething(); 
} 

interface B extends A { 

    public void doSomethingElse(); 
} 

public class AClass implements A, B { 

    public void doSomething() {} 

    public void doSomethingElse() {} 

} 

Javaはなぜこのような宣言を許可しますか? SubInterface(B)を実装することで同じことが達成できる場合、両方のインターフェースを実装するのはどうですか?クラス内のスーパーインターフェイスとサブインターフェイスの両方を実装する(クラスAはSuperInterface、SubInterfaceを実装します)

+3

許可しないと何が得られるでしょうか? –

+0

[なぜ、親クラスと子クラスの両方が同じインターフェイスを実装するのですか?](http://stackoverflow.com/questions/5668429/why-would-both-a-parent-and-child-class-implement-同じインタフェース) –

答えて

3

私は「なぜ」の質問は唯一のJavaのデザイナーによって答えることができると思います。

​​〜Bを既に実装している既存のクラスを壊さずに追加することができる理由の1つは、

この構成を使用するもう1つの理由は、AClassというエンドユーザーにすぐに、クラスがABの両方を実装していることを明確にするためです。これは、二回冗長ですが、ノー混乱につながる実装していないのはなぜRedundant implementation of List interface in ArrayList.java

2

これは単に便利です。界面構造が何であるかを追跡することが困難な場合があり、そのすべてを追跡する必要がプログラマに面倒になります。また、冗長インターフェースを許可しないことから、何度もインターフェースを実装することはやむを得ない場合があります。例:

interface A { ... } 
interface B extends A { ... } 
interface C extends A { ... } 
public class AClass implements B, C { ... } 

この場合、Aは2回「実装」されていますが、問題ありません。それは単にAClassAB、およびCで宣言された各メソッドを実装しなければならないことを意味します。

0

1)で説明されています。

2)インタフェースBを変更しなくてもよい(もはや)Aを拡張することができます。 AClassはまだ実装されていましたAB

1

既存のパブリックインターフェイスに基本インターフェイスを追加することは、大きな変更でした。
(クライアントコードに既に両方のインターフェイスを実装しているクラスがある場合)

関連する問題