我想知道是否可以将一个参数设置为一个对象,该对象必须是一个扩展类并实现另一个。这里是一个例子:假设我有一个名为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