接口名称为Type

时间:2012-12-09 10:48:02

标签: java interface

我正在尝试理解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);

4 个答案:

答案 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;

}