迭代不同对象的ArrayList

时间:2016-02-23 04:38:41

标签: java arraylist abstract-class

我有一个带有几个子类的抽象类。测试器类有一个ArrayList,其中包含每个子类的1个对象。它们每个都有一个相同名称的方法,我如何遍历ArrayList并为每个对象调用该方法?

我的一个子类(其他基本相同):

public class MyMath extends Homework {
private int pagesRead;
private String typeHomework;

public MyMath(int pagesRead, String typeHomework) {
    super(pagesRead, typeHomework);
}

public void createAssignment(int p) {
    setPagesRead(p);
    setTypeHomework(typeHomework);
}

public void toString(int pagesRead, String typeHomework) {
    System.out.println("Homework type: " + typeHomework + ". Number of pages read: " + pagesRead + ".");
}

}

在我的测试类主要方法中:

ArrayList homework = new ArrayList();
homework.add(new MyMath(5, "Math"));
homework.add(new MyScience(5, "Science"));
homework.add(new MyEnglish(5, "English"));
homework.add(new MyJava(5, "Java"));

4 个答案:

答案 0 :(得分:1)

好吧,如果在抽象类中指定了方法,并且您已经使用其中的所有对象构建了ArrayList,那么您应该只需遍历ArrayList(for循环)并只调用.method。 ()

答案 1 :(得分:0)

如果您的ArrayList是类型,并且您的界面也有该方法,那么您可以像这样调用它们

for(int i = 0; i < list.length();i++)
{
    list[i].METHOD_NAME();
}

答案 2 :(得分:0)

您可以遍历包含对象的arraylist ant,并且可以在该对象上调用该方法。例如,

get its value

然后

not to change its value

答案 3 :(得分:0)

如果你还没有在课堂上介绍过泛型,你必须手动进行投射。如果你已经涵盖了泛型,你应该使用它们!请参阅lak91的回答。

public abstract class AbstractTest
{
   public abstract void oneTwo( int i, String s );

   public static void main(String[] args) {
      List list = new ArrayList();
      list.add( new One() );
      list.add( new Two() );
      for( Object test : list ) {
         AbstractTest abTest = (AbstractTest) test;
         abTest.oneTwo( 0, "test" );
      }
   }

}

class One extends AbstractTest {

   @Override
   public void oneTwo( int i, String s )
   {
      System.out.println("One");
   }

}

class Two extends AbstractTest {

   @Override
   public void oneTwo( int i, String s )
   {
      System.out.println("Two");
   }

}