Java类实现错误

时间:2015-01-18 14:59:51

标签: java class inheritance

所以我正在做一个项目,我有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实现了相同的接口,为什么我会收到错误?

如果我不能进一步了解,我很抱歉。

感谢

3 个答案:

答案 0 :(得分:1)

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

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

A可以引用Class1 a Class3B可以引用Class2 一个Class4。但是Class1无法引用Class3Class2也不能引用Class4)。

答案 1 :(得分:1)

由于Class3未从Class1继承,Class4未从Class2继承。

您的期望可能是

private static A object1;
private static B object2;

答案 2 :(得分:1)

当两个类实现相同的接口时,您不能将一个类的实例分配给另一个类的类型的变量。这两个类可能有不同的方法(除了接口的常用方法)。因此,Class1变量只能包含Class1的实例或Class1的子类。

如果对变量使用接口类型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();
}