Java class 执行错误

Java class implementation error

所以我在做一个项目,我有2个接口。

我们称他们为:

public interface A{

}
public interface B{

}

我有 4 个不同的 class 实现这些接口,因为我需要在本地或通过网络 运行 它们:

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实现了这些接口的Proxies。我现在正在尝试测试这些 classes 并且我有以下代码:

private static Class1 object1;
private static Class2 object2;

if (localTest) {
      object1 = new Class1();
      object2 = new Class2();
} else {
      object1 = new Class3();
      object2 = new Class4();
}

根据上面的代码,我得到错误,object1 的 class 与 Class3 不兼容,因此 object2 的 class 与 Class4 不兼容。

既然Class1和Class3实现了相同的接口,Class2和Class4实现了相同的接口,为什么会报错?

如果我无法提供更多细节,我很抱歉。

谢谢

引用必须是正确的接口类型。像,

private static A object1; // <-- not Class1
private static B object2; // <-- not Class2

一个A可以引用一个Class1 一个Class3和一个B可以引用一个Class2一个Class4。但是 Class1 不能引用 Class3Class2 也不能引用 Class4)。

因为Class3没有继承自Class1Class4也没有继承自Class2

你期待的可能是

private static A object1;
private static B object2;

当两个 class 实现相同的接口时,您不能将一个 class 的实例分配给另一个 class 类型的变量。这两个 classes 可能有不同的方法(接口的公共方法除外)。因此,Class1 变量只能保存 Class1 的实例或 Class1 的子classes。

如果您对变量使用接口类型 AB 会更有意义,因为类型 A 的变量可以包含该接口的任何实现。

private static A object1;
private static B object2;

if (localTest) {
      object1 = new Class1();
      object2 = new Class2();
} else {
      object1 = new Class3();
      object2 = new Class4();
}