Activity是MainFragmentListener的一个实例,是吗?

Activity is an instance of MainFragmentListener, is it true?

我想知道,这怎么可能。
我有带有监听器的 MainActivty 和 MainFragment:MainFragmentListener。
当然,我在 MainActivity 中将此侦听器实现为接口。
现在我试图理解这一点:

if (context instanceof MainFragmentListener)

总是对的,怎么可能? MainActivity 不是 MainFragmentListener 的实例。
MainFragmentListener 只是接口,不是对象!

主要片段:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof MainFragmentListener) {
        mListener = (MainFragment.MainFragmentListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

public interface MainFragmentListener {
    void xx();
    void yy();
}

activity:

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener,
        MainFragment.MainFragmentListener{  

public void xx(){
     abc
 };
public void yy(){
abc2
 };

}

Activity is higher in the hierarchy than the fragment interface

所以呢?假设 Fragment 分配给 MainActivity,那么 context instanceof 将对

成立
  • class 本身 - MainActivity。
  • 你在那个class上定义的任何接口(不管接口的定义写在哪里)
    • NavigationView.OnNavigationItemSelectedListener
    • MainFragment.MainFragmentListener

以及每个class和接口in the hierarchy

public class AppCompatActivity extends FragmentActivity implements AppCompatCallback, TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider

java.lang.Object
   ↳    android.content.Context
       ↳    android.content.ContextWrapper
           ↳    android.view.ContextThemeWrapper
               ↳    android.app.Activity
                   ↳    android.support.v4.app.FragmentActivity

这是因为 instanceof 还检查 class 是否实现了接口。您可以阅读 documentation:

The instanceof operator compares an object to a specified type. You can use it to test if an object is an instance of a class, an instance of a subclass, or an instance of a class that implements a particular interface.

尽管我认为 instanceof 运算符名称有点误导。