2012-08-05 27 views
3

一個類的實例,如果我有:傳遞其實現兩個接口爲兩個不同的亞型

public interface One{ 
    public void method1(); 
} 

public interface Two{ 
    public void method2(); 
} 

public class AClass implements One, Two{ 

} 

public static void aDiffMethod1(One o){ 
    o.method1(); 
} 

public static void aDiffMethod2(Two t){ 
    t.method2(); 
} 

public static void main(String[] args){ 
    AClass a = new AClass(); 
    aDiffMethod1(a); 
    aDiffMethod2(b); 
} 

有時候在我的代碼使用實際上它是接口的一個亞型將通過ACLASS實例(換句話說,方法的參數類型將是One,我將傳遞類型AClass),並且在其他時間,我可以傳遞知道它的接口的子類型的AClass對象Two(方法im的參數類型傳遞給是兩個,所以我把AClass作爲Two的一個子類型)。

將AClass的實例作爲不同接口的子類型的幌子傳遞給不同的方法是可以的嗎?

這是什麼意思,通過編程的界面 - 所以它很好?

+0

好問題... – 2012-08-05 13:58:12

回答

2

是的,這是接口的全部要點。

只接受接口One的方法只會調用method1,所以這是安全的。只接受Two接口的方法只會呼叫method2,所以再次安全。

+0

這是什麼意思,他們的短語編程界面? – user997112 2012-08-05 13:03:56

+0

是的,這是正確的。編程使用該對象,就好像它是接口一樣。 – Geoffrey 2012-08-05 13:04:52

2

是的,這很好。如果一個方法期望一個接口實現,那麼你的AClass將履行該合同。

編程到接口而不是實現是一種設計方法,您可以將行爲操作分組到您的接口中,而不是將它放在主類中。

相關問題