2012-12-09 62 views
2

我想了解Java中的接口,并有这个任务来做我是一个堆栈。这一定很容易,但我似乎没有看到解决方案。接口包含几个方法,如果这个集合中的所有元素都在集合中,它们中的一个应该返回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

接口类似于类的想法。

它包含像方法定义和静态和最终变量的东西。

因此,任何实现它们的类都将包含一个主体(即在这个类中处理该方法的方法)。

对于如。

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实现。

它也好像你都搞不清楚如何运行此方法,所以我会补充说

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 
+0

是的,这完美的作品,只是两行代码 - 伟大的。 – etilia

+0

没问题。但我希望你能理解这个概念 – cjds

0

How do I check that the instance of myClass is a subset of ISet collection

使用instanceOf

if(myClass instanceOf ISet){...}

0

一个接口,它定义了接口(功能的原型(类例如ISet iset = new myClass()意味着你创建了myClass(具体)的实例,但ISet类型的变量持有引用。这是可能的因为多元主义。因为myClass提供ISet提供的原型定义。在多态性的帮助下,您只能调用iset.isSubsetOf(...),因为ISet只有一个方法原型。

同样WITN多态性的帮助下,你可以做这样的

ISet set1 = new myClass() 
ISet set2 = new myClass() 

set1.isSubsetOf(set2); 
0

解决。这个问题出现在整数的ArrayList中 - 我试图使用containsAll()方法,这并不适合。我用循环来检查子集中的每个元素是否可以在主集中找到。还有一个单独的查找方法,它将查找单个元素。

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; 

}

相关问题