【问题标题】:Java class implementation errorJava类实现错误
【发布时间】:2015-01-18 14:59:50
【问题描述】:

所以我正在做一个项目,我有 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不兼容的错误,object2的类与Class4也不兼容。

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

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

谢谢

【问题讨论】:

    标签: java class inheritance


    【解决方案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();
    }
    

    【讨论】:

      【解决方案2】:

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

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

      A 可以引用Class1 Class3B 可以引用Class2 Class4 .但是Class1 不能引用Class3Class2 也不能引用Class4)。

      【讨论】:

        【解决方案3】:

        因为Class3 不是从Class1 继承的,而Class4 不是从Class2 继承的。

        你所期望的可能是

        private static A object1;
        private static B object2;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-10
          • 1970-01-01
          • 2017-06-17
          相关资源
          最近更新 更多