如何使用java中的接口覆盖方法

Max*_*Max 2 java generics inheritance overloading

我有一个接口I,两个实现它的类A和B以及一个通用类型接口I的列表,因此它可以包含A和B类型的对象.

class A implements I
class B implements I
List<I> myList
Run Code Online (Sandbox Code Playgroud)

我想写(在一个单独的类中)两个方法进程(A a)和进程(B b)所以我可以遍历列表并为每个元素调用进程(i)和java会自动(unbox?)对象并调用正确的方法.

class D{
    processList(){
        for( I i : myList ){
            process( i ); // invoke either process(A) or process(B) based on instanceof
        }
    }
    public void process(A a){...}
    public void process(B b){...}
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过在列表中的每个元素上调用'instanceof'然后if-else调用不同的方法来实现这一点,但必须有更好的方法.

在MVC场景中,类A和B在模型中,而类D在Controller中,因此需要分离.

有人可以帮忙吗?

Ell*_*sch 6

肯定有更好的办法.

有.将方法process()添加到接口I.然后你可以process在迭代时调用这些项目List<I>-

List<I> list = new ArrayList<>(); 
// populate list with A and B instances, then
for (I i : list) {
  i.process();
}
Run Code Online (Sandbox Code Playgroud)

显然A,B必须提供具体的实现process().