继承JAVA实现接口,方法采用并返回类型接口
我遇到了一个问题。 我必须实现这个接口:
public interface Set_of_objects {
boolean equal(Set_of_objects s);
Set_of_objects cross(Set_of_objects s);
}
实现它的类必须获取一个对象数组,并用另一个对象数组对其进行测试。如果它们相等,则方法“equal”应返回true(如果它们不相等,则返回false),而方法“cross”必须返回由它们共享的对象组成的对象数组
由于方法中需要的参数类型,我甚至无法找出如何比较这两个数组
public class Object_array_test implements Set_of_objects {
Object[] x = new Object[5];
public Object_array_test (Object[] x) {
this.x = x;
}
public boolean equal(Set_of_objects s) {
return s.equals(x);
}
public cross(Set_of_objects s) {
return null;
}
}
当我这样做时,它会说: “equals()不太可能的参数类型:对象[]似乎与\u对象的集合\u无关”
当我试着选角时(就像我在网上看到的):
Object[] y = (Object[]) s;
我明白了: “无法从\u对象集\u强制转换为对象[]”
我如何解决这个问题,有人能解释一下它到底是如何工作的吗? 谢谢你,很抱歉问了这个愚蠢的问题
# 1 楼答案
这里似乎有一些小问题。以下是更新的界面:
在原始接口中,没有将数组作为对象传递。您只是传递了一个接口“type”。但是,为了将数组传递给类中的任何方法或构造函数,必须传递实际的数组对象。我们可以在接口中传递一个x对象和一个y对象,任何实现该接口的类显然都会使用以下方法:
在上面的代码中,您不知道将传递哪种类型的对象,这就是我们将其转换为字符串的原因。正如我前面提到的,这些方法需要将一个对象作为参数来处理数组。简单地传递接口“type”将不起作用。在公园里。方法,然后我们可以比较这两个数组,看看它们是否相同。否则,代码将返回false。如果它们相同,代码将返回true
最后,让我们测试类和输出:
正如您所看到的,这两个数组不相等,代码返回false。我们还从一个数组列表创建了一个新数组,该数组列表返回数组中相同的数字。我们返回已创建的新对象,并将其打印到控制台
这是您的输出:
# 2 楼答案
只要试着把你的要求再读一遍(慢慢地:-):
所以。。。都不是
也不是
满足您的需求-
Set_of_objects
不是一个数组,而是一个对象实现的Set_of_objects
接口接口的方法签名必须如下所示
B.从另一方面来说,你可以使用你的
Set_of_objects
作为数组的持有者,就像你所做的那样。。。但是您需要另一个方法(数组的getter,例如getX()
),并使用它来比较数组成员另外,我猜您将了解如何通过数组循环来比较对象,并将它们放入另一个数组中以从
cross
方法返回另外,在现实世界中,不建议从方法返回数组的新实例。。。但作为锻炼,这并不重要
祝你好运