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
不能引用 Class3
(Class2
也不能引用 Class4
)。
因为Class3
没有继承自Class1
,Class4
也没有继承自Class2
。
你期待的可能是
private static A object1;
private static B object2;
当两个 class 实现相同的接口时,您不能将一个 class 的实例分配给另一个 class 类型的变量。这两个 classes 可能有不同的方法(接口的公共方法除外)。因此,Class1 变量只能保存 Class1 的实例或 Class1 的子classes。
如果您对变量使用接口类型 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();
}
所以我在做一个项目,我有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
不能引用 Class3
(Class2
也不能引用 Class4
)。
因为Class3
没有继承自Class1
,Class4
也没有继承自Class2
。
你期待的可能是
private static A object1;
private static B object2;
当两个 class 实现相同的接口时,您不能将一个 class 的实例分配给另一个 class 类型的变量。这两个 classes 可能有不同的方法(接口的公共方法除外)。因此,Class1 变量只能保存 Class1 的实例或 Class1 的子classes。
如果您对变量使用接口类型 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();
}