首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java类实现错误

Java类实现错误
EN

Stack Overflow用户
提问于 2015-01-18 14:59:50
回答 3查看 805关注 0票数 1

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

我们打电话给他们:

代码语言:javascript
复制
public interface A{

}
public interface B{

}

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

代码语言:javascript
复制
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实现了这些接口的代理。我现在正在尝试测试这些类,我有以下代码:

代码语言:javascript
复制
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实现了相同的接口,那么为什么要得到错误呢?

如果我不能透露更多的细节,我很抱歉。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-18 15:03:50

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

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

代码语言:javascript
复制
private static A object1;
private static B object2;

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

Stack Overflow用户

发布于 2015-01-18 15:01:59

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

代码语言:javascript
复制
private static A object1; // <-- not Class1
private static B object2; // <-- not Class2

A可以指Class1 a Class3B可以指Class2 a Class4。但是Class1不能引用Class3 ( Class2也不能引用Class4)。

票数 1
EN

Stack Overflow用户

发布于 2015-01-18 15:02:11

因为Class3没有从Class1继承,Class4也没有从Class2继承。

你所期望的可能是

代码语言:javascript
复制
private static A object1;
private static B object2;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28011100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档