Java 类对象作为接口的工作方式
我试图理解android示例中的MVP流 LoginPresenter在其attachView方法中接受LoginView。但在下面的示例中,这是已传递的,但这是LoginActivity的对象。 这是怎么回事 如果LoginActivity实现了一个以上的接口,比如LogoutView,那么如何在loginPresenter.attachView(这个)中使用LoginView而不是LogoutView呢Java 类对象作为接口的工作方式,java,oop,interface,Java,Oop,Interface,我试图理解android示例中的MVP流 LoginPresenter在其attachView方法中接受LoginView。但在下面的示例中,这是已传递的,但这是LoginActivity的对象。 这是怎么回事 如果LoginActivity实现了一个以上的接口,比如LogoutView,那么如何在loginPresenter.attachView(这个)中使用LoginView而不是LogoutView呢 public class LoginActivity extends BaseActiv
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);
}
公共类LoginActivity扩展BaseActivity实现LoginView{
@注入
LoginPresenter LoginPresenter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
loginPresenter.attachView(this);//这(LoginActivity)如何
//实例)传递到这里的是
//作为LoginView工作,但
//LoginPresenter接受
//这里是LoginView。
//需要解释。
}
}
公共类LoginPresenter扩展了BasePresenter{
@凌驾
公共无效附件视图(LoginView mvpView){
super.attachView(mvpView);
}
}
公共类BasePresenter实现了Presenter{
@凌驾
公共无效附件视图(T mvpView){
mMvpView=mvpView;
}
}
公共界面演示者{
void attachView(V mvpView);
}
实现
表示“可以用作”
您的LoginActivity
实现了LoginView
,因此它可以用作LoginView
就这么简单
如果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);
}
如果你的意思是这样的:
class LoginActivity implements LoginView, LogoutView
interface LoginView {
void login(String userName, String password);
}
然后LoginActivity可以用作LoginView
和LogoutView
。多酷啊
为什么?
接口用于定义类具有哪些功能,即类可以做什么
让我们假设LoginView
看起来像这样:
class LoginActivity implements LoginView, LogoutView
interface LoginView {
void login(String userName, String password);
}
它说loginview
必须能够使用用户名和密码login
实现此接口时,必须将此方法添加到实现类中。完成此操作后,您的类可以用作
LoginView
。为什么?因为它有一个login
方法 这是可行的,因为LoginActivity
实现了接口Loginview
这个传入loginPresenter.attachView的接口是LoginActivity的实例。降低问题的等级并不是解决问题的办法。请帮助我解释LoginView是如何实现LoginView的当您编写LoginActivity实现LoginView
时,这实际上意味着允许类型为LoginView
的变量引用类LoginActivity
的对象。这正是您的示例中发生的情况。这是基本的OO概念。你可以使用谷歌查找关于itIf LoginActivity的详细信息,实现一个以上的接口,比如LogoutView,然后如何在loginPresenter.attachView(这个)这是LoginView而不是LogoutView?这解释了我的疑问。非常感谢。