所以我正在做一个项目,我有两个接口。
我们打电话给他们:
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不兼容的错误,以及object2类与Class4不兼容的错误。
既然Class1和Class3实现了相同的接口,而Class2和Class4实现了相同的接口,那么为什么要得到错误呢?
如果我不能透露更多的细节,我很抱歉。
谢谢
发布于 2015-01-18 15:03:50
当两个类实现相同的接口时,不能将一个类的实例分配给另一个类类型的变量。这两个类可能有不同的方法(除了接口的常用方法)。因此,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();
}发布于 2015-01-18 15:01:59
引用必须是正确的接口类型。就像,
private static A object1; // <-- not Class1
private static B object2; // <-- not Class2A可以指Class1 或a Class3,B可以指Class2 或a Class4。但是Class1不能引用Class3 ( Class2也不能引用Class4)。
发布于 2015-01-18 15:02:11
因为Class3没有从Class1继承,Class4也没有从Class2继承。
你所期望的可能是
private static A object1;
private static B object2;https://stackoverflow.com/questions/28011100
复制相似问题