今天打算动手写mvp项目的时候,发现了一个问题,presenter在v中也是以接口的形式存在,如在类中的成员变量里声明一个接口类型的presenter(如:private LoginPresenter presenter),而在Activity的onCreate中调用时将其重新赋值(presenter = new LoginPresenterImpl();进行向上转型,此时我的疑问是,当调用presenter的方法时,是否所有实现了该LoginPresenter接口的类对应的那个方法都会被调用,由此,我写了一个例子:
run.java接口
public interface run {
public void go();
}
第一个实现类:
public class tiger implements run{
@Override
public void go() {
System.out.println("tiger go");
}
}
第二个实现类:
public class rabbit implements run{
@Override
public void go() {
// TODO Auto-generated method stub
System.out.println("rabbit go");
}
}
测试类:
public class Test {
public static run myRun;
public static void main(String[] args) {
myRun =new tiger();
myRun.go();
}
}
结果如下:
tiger go
结论:实例化是什么,就会调用哪个的方法,而不管转型成的类型,比如当前实例化的是LoginPresenterImpl类,而不管转成的LoginPresenter类型,调用也是调用LoginPresenter类的方法。