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

时间:2013-07-12 21:37:07

标签: java inheritance interface subclass

我正在尝试编写一个程序,该程序读取用户输入的扫描程序中的所有单词,将它们放入ArrayList调用方法,并打印所有长度小于5的单词的列表。是的,我可以在一个程序中编写它,但是赋值的目的是使用接口和继承。我编写了一个程序,将用户输入循环到一个对象数组中。我写了一个接口(这不能改变),我实现了一个类,它扫描数组中的单词,并根据单词是否少于五个或多于五个字母给出一个布尔值。我写了一个方法,从类中获取答案并创建一个新的对象ArrayList。如果单词少于五个字母,则将其添加到数组中。我试图将方法调用到我的主要,但我得到一个“过滤器是抽象的”“无法实例化”错误...但我的界面不是抽象的?我不知道如何解决它并让它疯狂......任何帮助都非常感激。谢谢!

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

2 个答案:

答案 0 :(得分:1)

问题出在这一行

Filters tran= new Filters(names);

由于Filters是一个接口,并且 interfaces abstract 类无法实例化,因此只能声明它(分配它)以获取内存对象。

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

Filters tran = new SWordFilter();

理解这样的界面:

你有一些类需要有一个基类,如java.util.Listjava.util.ArrayListjava.util.LinkedList的基类,你不能实例化List但是你可以将它分配给 ArrayList LinkedList ,因为摘要是专门设计为不实例化的,它们具有某些类的通用行为。

答案 1 :(得分:0)

你无法实例化一个接口(因为它是抽象的),实例化实现过滤器的方法!!

相关问题