2012-04-13 14 views
-4
I i = new A(); 

クラスAのオブジェクトをインスタンス化するためにインタフェースIを使用できるのはなぜですか? obj = new A()を使ってはいけませんか?クラスのインスタンス化Java

interface I { 
    void f(); 
    void g(); 
} 

class A implements I { 
    public void f() { System.out.println("A: doing f()"); } 
    public void g() { System.out.println("A: doing g()"); } 
} 

class B implements I { 
    public void f() { System.out.println("B: doing f()"); } 
    public void g() { System.out.println("B: doing g()"); } 
} 

class C implements I { 
// delegation 
    I i = new A(); 

    public void f() { i.f(); } 
    public void g() { i.g(); } 

    // normal attributes 
    public void toA() { i = new A(); } 
    public void toB() { i = new B(); } 
} 

ありがとう!

+5

質問/問題点を明確にすることはできますか? – beny23

答えて

3

タイプ「A」のオブジェクトを参照するには、タイプ「I」の参照変数を使用できますか?

A implements I(あなたのコードから逐語引用)。

AはインターフェースIで指定されたすべてを行いますので、参照の宣言された型Iと互換性があります。インタフェースと継承を介して、オブジェクトは複数の型を持つことができます。

+0

私はAのスーパークラス(親)として振舞うのですか? –

1

これはIがIインタフェースを実装しているため、AがI型であるためです。

+0

ありがとう!分かりました –

関連する問題