我想知道是否可以將一個參數設置爲一個對象,該對象必須是一個擴展類並實現另一個。這裏是一個例子:假設我有一個名爲ClassA的類和一個名爲MyInterface的接口。Java - 將參數設置爲對象,它既擴展了一個對象又實現了一個接口
public class ClassA {
/* code */
}
public interface MyInterface {
/* code */
}
讓我們說別的地方有一個叫做ClassB的類,它既擴展了ClassA又實現了MyInterface。
public class ClassB extends ClassA implements MyInterface {
/* code */
}
我也可以有一個ClassC,這也延伸ClassA和實現MyInterface的:
public class ClassC extends ClassA implements MyInterface {
/* code */
}
我的問題是這樣的:
比方說,我有一個名爲方法1方法,在方法1我想要一個接受Object的參數。比方說,我想讓這個Object或者繼承ClassA,或者實際上是ClassA本身。這是很容易做到:
public void method1(ClassA parameter) {
}
比方說,我也想一個方法2,在方法2我想有它接受任何一個實現MyInterface的一個參數。再次,這是簡單的:
public void method2(MyInterface parameter) {
}
但是,如果我想要一個方法3是什麼,我想有一個參數,它僅接受對象,其無論是子類ClassA的或者是ClassA的本身,並實現MyInterface的,所以都接受ClassB和ClassC,但不是任何只擴展ClassA的類,或者只實現MyInterface的類。像:
public void method3 ([Something that extends ClassA implements MyInterface] parameter) {
/* code */
}
你不應該。你應該弄清楚你需要的功能,把它封裝在一個類型中,並且需要一個這種類型的對象(無論是類還是接口)。如果其中任何一個足夠好,那麼這意味着它們共享一些共同點,這就是你的參數應該捕捉。 – dlev 2012-07-12 18:28:53
謝謝,dlev。你提出了一個非常好的觀點 - 這看起來似乎更合理,所以我會盡力而爲。 – 2012-07-12 22:26:59