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

爲什麼我們可以使用接口I實例化類A的對象?我們不應該使用A 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 2012-04-13 12:32:29

回答

3

我們如何使用'I'類型的引用變量來引用'A'類型的對象?

因爲A implements I(從您的代碼逐字引用)。

A完成接口I指定的一切,因此它與參考的聲明類型I兼容。通過接口和繼承,對象可以有多種類型。

+0

那麼,我是否像A的超類(父)一樣行事? – 2012-04-13 17:19:04

1

這是因爲A是類型I,因爲它實現了I接口。

+0

謝謝!我現在明白了 – 2012-04-13 17:23:05