开始Java接口程序收集字符串并打印

开始Java接口程序收集字符串并打印,java,inheritance,interface,subclass,Java,Inheritance,Interface,Subclass,我正试图编写一个程序,从用户输入的扫描仪中读取所有单词,将它们放入ArrayList调用一个方法,然后打印长度小于5的所有单词的列表。是的,我可以在一个程序中编写这个,但是赋值的目的是处理接口和继承。我编写了一个程序,将用户输入循环到一个对象数组中。我编写了一个接口(不能更改),并实现了一个类,该类扫描数组中的单词,并根据单词是少于五个字母还是多于五个字母给出一个布尔值。我编写了一个方法,该方法从类中获取答案并创建一个新的ArrayList对象。如果单词少于五个字母,则将其添加到数组中。我试图将

我正试图编写一个程序,从用户输入的扫描仪中读取所有单词,将它们放入ArrayList调用一个方法,然后打印长度小于5的所有单词的列表。是的,我可以在一个程序中编写这个,但是赋值的目的是处理接口和继承。我编写了一个程序,将用户输入循环到一个对象数组中。我编写了一个接口(不能更改),并实现了一个类,该类扫描数组中的单词,并根据单词是少于五个字母还是多于五个字母给出一个布尔值。我编写了一个方法,该方法从类中获取答案并创建一个新的ArrayList对象。如果单词少于五个字母,则将其添加到数组中。我试图将该方法调用到我的main中,但是我得到了一个“Filters is abstract”“Cannot instanced”错误…但是我的接口不是抽象的?我不知道如何修复它,它让我发疯……非常感谢任何帮助。谢谢大家!

public interface Filters
{
    boolean accept(Object x);
//this interface cannot be changed.
}

public class SWordFilter implements Filters
{
//This is my subclass for the interface
    public boolean accept(Object x)
    {
    String y =(String) x;
    boolean accept=false;

    if (y.length()< 5)
    accept=true;
    return accept;
    }
}



import java.util.ArrayList;
import java.util.Scanner;

public class MyHomework
{
 //this is my main and my method.  I cannot call the method.
    public static void main(String[] args)
    {

        ArrayList<Object> names=new ArrayList<Object>();
        Scanner in=new Scanner(System.in);

        int i=0;
        while(i<5)
        {
            System.out.println("Enter the words");
            names.add(in.next());
            i++;
        }
        Filters tran= new Filters(names);
        Object result=collectAll(names,tran);
    }


public static ArrayList<Object> collectAll (ArrayList<Object> list, Filters f)

{
    ArrayList<Object> result= new ArrayList<Object>();

    for (int x=0; x<5; x++)
    {
        if (f.accept(list.get(x)))
        {
            result.add(list.get(x));
        }
        else
        {
        System.out.print("the word is too long");
        }
        //SWordFilter julie= new SWordFilter();
        //System.out.print(julie.accept(names.get(j)));
    }
    return result;
}
}
公共接口过滤器
{
布尔接受(对象x);
//无法更改此接口。
}
公共类swardfilter实现过滤器
{
//这是我的接口子类
公共布尔接受(对象x)
{
字符串y=(字符串)x;
布尔接受=假;
如果(y.长度()<5)
接受=真;
退货接受;
}
}
导入java.util.ArrayList;
导入java.util.Scanner;
公共课我的家庭作业
{
//这是我的main和方法。我无法调用该方法。
公共静态void main(字符串[]args)
{
ArrayList name=新的ArrayList();
扫描仪输入=新扫描仪(系统输入);
int i=0;

而(i问题就在这一行

Filters tran= new Filters(names);
由于
过滤器
是一个接口,并且接口和抽象类不能实例化,因此只能声明它(分配它)以获取对象的内存

所有成员函数(方法)都是抽象的,但您可以将其分配给实现此接口的某个类的新对象:

Filters tran = new SWordFilter();
了解如下接口:


你有一些类需要有一个基类,比如
java.util.List
java.util.ArrayList
java.util.LinkedList
的基类,你不能实例化
List
,但是你可以将它分配给ArrayList或LinkedList,因为抽象是专门设计来不被实例化的,它们持有一个common某些类的行为。

不能实例化接口(因为它是抽象的),实例化实现过滤器的方法!!

我不确定这是什么意思…我知道导致问题的原因…但我不明白问题所在。将接口视为一个抽象类,其中每个方法都是抽象的。@azad非常感谢您向我解释这个概念。我现在明白了发生了什么。谢谢你!!!@LindsayBaird:不客气,还可以看看oracle教程。