Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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_Class_Oop - Fatal编程技术网

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

Java 初始化几个实现相同接口的不同类,java,class,oop,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 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方法。我想把它们存储在一个列表中,然后浏览一下并给它们打电话,但我做不到

当您有实现特定接口的不同类时,您可以用多态方式处理它们

首先,让我们根据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();
}
另外,您甚至可以使用Java8/9在一行中编写此代码

爪哇8

爪哇9


一个列表应该可以完成这项工作,我在想,这是一个好方法,还是创建一个父类更好?它很有效,所以保持简单,不要创建无用的父类。另请参见@Avtontom\在您的简单示例中,创建父类并不会真正产生影响。只需使用包含您所需方法的第一个公共父级将是最好的解决方案。得到它,感谢你们两位。
class one action
class two action
class three action
Arrays.asList(new ClassOne(), new ClassTwo(), new ClassThree()).forEach(System.out::println);
List.of(new ClassOne(), new ClassTwo(), new ClassThree()).forEach(System.out::println);