类对象如何作为接口工作

时间:2017-08-09 06:56:50

标签: java oop interface

我试图在Android示例中理解MVP流程。

LoginPresenter在其attachView方法中接受LoginView。但是在下面的示例中,这是传递但是传递的是LoginActivity的对象。 这是如何工作的?

如果LoginActivity实现了一个更多的接口说LogoutView,那么如何在loginPresenter.attachView(这个)这是LoginView而不是LogoutView?

public class LoginActivity extends BaseActivity implements LoginView {

@Inject
LoginPresenter loginPresenter;

@Override
    protected void onCreate(Bundle savedInstanceState) {

        loginPresenter.attachView(this); //how this ( LoginActivity 
                                         //instance )passed in here is 
                                         //working as LoginView but 
                                         //LoginPresenter accepts 
                                         //LoginView here.
                                         //Need Explaination.
    }


}


public class LoginPresenter extends BasePresenter<LoginView> {

@Override
    public void attachView(LoginView mvpView) {
        super.attachView(mvpView);
    }

}

public class BasePresenter<T extends MVPView> implements Presenter<T> {
@Override
    public void attachView(T mvpView) {
        mMvpView = mvpView;
    }
}


public interface Presenter<V extends MVPView> {

    void attachView(V mvpView);
}

1 个答案:

答案 0 :(得分:2)

implements表示&#34;可以用作&#34;。

您的LoginActivity实施LoginView,因此可用作 LoginView

这很简单。

  

如果LoginActivity实现了另一个接口说LogoutView,那么如何在loginPresenter.attachView(this)中这是LoginView而不是LogoutView?

如果你的意思是这样的话:

class LoginActivity implements LoginView, LogoutView

然后,LoginActivity既可以用作LoginView a LogoutView。这有多酷!

为什么?

接口用于定义类具有哪些功能,即类可以做什么。

让我们说LoginView看起来像这样:

interface LoginView {
    void login(String userName, String password);
}

它表示LoginViews必须能够login使用用户名和密码。

实现此接口时,必须将此方法添加到实现类中。完成此操作后,您的班级可用作 a LoginView。为什么?因为它有login方法!