所以我正在做一个项目,我有2个接口。
我们打电话给他们:
public interface A{
}
public interface B{
}
我有4个不同的类来实现这些接口,因为我需要在本地或通过网络运行它们:
public class Class1 implements A{
// logical implementation of A
}
public class Class2 implements B{
// logical implementation of B
}
public class Class3 implements A{
// proxy implementation of A
}
public class Class4 implements B{
// proxy implementation of B
}
Class1和Class3实现接口的逻辑,而Class2和Class4实现这些接口的代理。我现在正在尝试测试这些类,我有以下代码:
private static Class1 object1;
private static Class2 object2;
if (localTest) {
object1 = new Class1();
object2 = new Class2();
} else {
object1 = new Class3();
object2 = new Class4();
}
根据上面的代码,我得到的错误是object1的类与Class3不兼容,因此是class4的object2类。
由于Class1和Class3实现了相同的接口,Class2和Class4实现了相同的接口,为什么我会收到错误?
如果我不能进一步了解,我很抱歉。
感谢
答案 0 :(得分:1)
引用必须是正确的接口类型。像,
private static A object1; // <-- not Class1
private static B object2; // <-- not Class2
A
可以引用Class1
或 a Class3
而B
可以引用Class2
或一个Class4
。但是Class1
无法引用Class3
(Class2
也不能引用Class4
)。
答案 1 :(得分:1)
由于Class3
未从Class1
继承,Class4
未从Class2
继承。
您的期望可能是
private static A object1;
private static B object2;
答案 2 :(得分:1)
当两个类实现相同的接口时,您不能将一个类的实例分配给另一个类的类型的变量。这两个类可能有不同的方法(除了接口的常用方法)。因此,Class1变量只能包含Class1的实例或Class1的子类。
如果对变量使用接口类型A
和B
会更有意义,因为类型A
的变量可以包含该接口的任何实现。
private static A object1;
private static B object2;
if (localTest) {
object1 = new Class1();
object2 = new Class2();
} else {
object1 = new Class3();
object2 = new Class4();
}