Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Interface - Fatal编程技术网

Java 类对象作为接口的工作方式

Java 类对象作为接口的工作方式,java,oop,interface,Java,Oop,Interface,我试图理解android示例中的MVP流 LoginPresenter在其attachView方法中接受LoginView。但在下面的示例中,这是已传递的,但这是LoginActivity的对象。 这是怎么回事 如果LoginActivity实现了一个以上的接口,比如LogoutView,那么如何在loginPresenter.attachView(这个)中使用LoginView而不是LogoutView呢 public class LoginActivity extends BaseActiv

我试图理解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);
}
公共类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?这解释了我的疑问。非常感谢。