我正在尝试理解Java中的接口,并且要执行此任务,我将其作为堆栈。它一定很容易,但我似乎没有看到解决方案。接口包含一些方法,如果此set的所有元素也在set中,则其中一个方法应返回true。即。
public interface ISet{
//some methods
boolean isSubsetOf(ISet x);
}
然后上课:
public class myClass implements ISet{
ArrayList<Integer> mySet;
public myClass{
mySet = new ArrayList<Integer>();
}
//some methods
public boolean isSubsetOf(ISet x){
//method body
}
}
我需要在方法体中编写什么?如何检查myClass的实例是否是ISet集合的子集?我试图施放,但它给出了一个错误:
ArrayList<Integer> param = (ArrayList<Integer>)x;
return param.containsAll(mySet);
答案 0 :(得分:0)
如何检查myClass的实例是否是ISet的子集 收藏
使用instanceOf
:
if(myClass instanceOf ISet){...}
答案 1 :(得分:0)
接口是一个类,它定义了一个具体分类与其他类共享的接口(函数原型)。它不能是接口的实例,而是具体类的实例,例如ISet iset = new myClass()
意味着你已经创建了myClass(具体)的实例,但ISet类型的变量保持引用。由于polymarphism,这是可行的。因为myClass
提供了ISet
提供的原型定义。在多态性的帮助下,您只能调用iset.isSubsetOf(...)
,因为ISet只有一个方法原型。
同样在多态性的帮助下,你可以这样做
ISet set1 = new myClass()
ISet set2 = new myClass()
set1.isSubsetOf(set2 );
答案 2 :(得分:0)
界面就像一个类的想法。
它包含方法定义,静态和最终变量等内容。
因此,任何实现它们的类都将包含一个body(即在此类中处理该方法的方法)。
例如。
public interface ISet{
boolean isSubsetOf(ISet x);
}
现在任何实现它的类都将“处理”方法isSubsetOf并返回一个布尔值。他们如何做到这一点不是接口业务。 现在在你的课堂上
public class myClass implements ISet{
ArrayList<Integer> mySet;
public myClass(){
mySet = new ArrayList<Integer>();
}
public boolean isSubsetOf(ISet x){
//you now have to get what type of object x is
// it is obviously implementing ISet therefore it most probably be myClass.
//So when you typecast the object it should typecast to myClass.
ArrayList<Integer> param = (ArrayList<Integer>)( ((myClass)x).mySet );
return param.containsAll(mySet)
}
}
这将起作用,因为我们将x.mySet强制转换为ArrayList,将x本身强制转换为myClass。
然而逻辑上有一个缺陷。如果你有另一个实现ISet的类,那么它们可能不会对myClass进行类型转换,但在这种情况下使用on implements你就可以了。
您似乎对如何运行此方法感到困惑,因此我将添加
myClass A=new myClass();
A.add(1); A.add(2); A.add(3);
myClass B=new myClass();
B.add(3); B.add(1); B.add(2); B.add(4);
A.isSubsetOf(B);
//This will answer true
答案 3 :(得分:0)
解决。问题出在整数的ArrayList中 - 我试图使用containsAll()方法,这不太合适。我使用循环来检查是否可以在主集中找到子集的每个元素。还有一个单独的find方法,可以查找单个元素。
public boolean isSubsetOf(ISet x){
myClass set = (myClass)x;
boolean found = false;
for (int element : mySet){
found = false;
if (set.find(element)){
found = true;
}
}
return found;
}