初始化几个实现相同接口的不同类

时间:2017-11-17 12:13:41

标签: java class oop

我有几个不同的类来实现接口,如下所示:

public class Class1 implements interface1 {

    @Override
    public void action(){
        //do somethod
    }
}

public class Class2 implements interface1 {

    @Override
    public void action(){
        //do somethod
    }
}

public class Class3 implements interface1 {

    @Override
    public void action(){
        //do somethod
    }
}

我的问题是,当我初始化这些类时,如何在循环中为每个类调用action方法。我正在考虑将它们存储在列表中,然后遍历它并调用它们,但我无法实现它。

1 个答案:

答案 0 :(得分:0)

如果你有不同的类来实现某些接口,你可以用多态方式处理它们。

首先,让我们根据java代码约定更改你的代码:

public interface Interface {

      void action();
} 

public class ClassOne implements Interface {

    @Override
    public void action(){
        System.out.println("class one action");
    }
}

public class ClassTwo implements Interface {

    @Override
    public void action(){
        System.out.println("class two action");
    }
}

public class ClassThree implements Interface {

    @Override
    public void action(){
        System.out.println("class three action");
    }
}

之后创建列表并向其添加新实例并为列表中的每个元素调用方法action(),您不需要知道列表中实际存在哪些类实例,您只需要知道所有这些都实现了某种界面。

List<Interface> list = new ArrayList<>();
list.add(new ClassOne());
list.add(new ClassTwo());
list.add(new ClassThree());
for(Interface instance : list) {
    instance.action();
}

输出将是:

class one action
class two action
class three action

P.S。你甚至可以用java 8/9

在一行中写这个

java 8

Arrays.asList(new ClassOne(), new ClassTwo(), new ClassThree()).forEach(System.out::println);

java 9

List.of(new ClassOne(), new ClassTwo(), new ClassThree()).forEach(System.out::println);