Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 作为类型的接口名称_Java_Interface - Fatal编程技术网

Java 作为类型的接口名称

Java 作为类型的接口名称,java,interface,Java,Interface,我正在努力理解Java中的接口,并有这个任务要做,我是一个堆栈。这一定很容易,但我似乎看不出解决办法。接口包含几个方法,如果此集合的所有元素也在该集合中,则其中一个方法应返回true。即 public interface ISet{ //some methods boolean isSubsetOf(ISet x); } 然后全班同学: public class myClass implements ISet{ ArrayList<Integer> mySet;

我正在努力理解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 mySet;
公共myClass{
mySet=newarraylist();
}
//一些方法
公共布尔isSubsetOf(ISet x){
//方法体
}
}
我需要在方法体中写什么?如何检查myClass实例是否是ISet集合的子集?我试图施放,但它给出了一个错误:

ArrayList<Integer> param = (ArrayList<Integer>)x;
    return param.containsAll(mySet);
ArrayList参数=(ArrayList)x;
返回参数containsAll(mySet);
如何检查myClass的实例是否是ISet的子集 收藏

使用
instanceOf


if(myClass instanceOf ISet){…}
接口是一个类,它定义了一个具体类与其他类共享的接口(函数原型)。接口的实例不能是具体类的,例如
ISet ISet=new myClass()
意味着你已经创建了myClass的实例(具体)但ISet类型的变量保留引用。这是可能的,因为多Marphism。因为
myClass
提供了
ISet
提供的原型定义。借助多态性,您只能调用
ISet.isSubsetOf(…)
,因为ISet只有一个方法原型

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

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

set1.isSubsetOf(set2 );

接口就像一个类的概念

它包含方法定义、静态变量和最终变量等内容

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

例如

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)
    }
}

已解决。问题出现在整数的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;

}

没问题。不过我希望你理解这个概念
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;